6622 lines
249 KiB
Python
6622 lines
249 KiB
Python
import pytest
|
|
import random
|
|
from tjnetwork import *
|
|
|
|
class TestApi:
|
|
def enter(self, p):
|
|
if is_project_open(p):
|
|
close_project(p)
|
|
|
|
if have_project(p):
|
|
delete_project(p)
|
|
|
|
create_project(p)
|
|
open_project(p)
|
|
|
|
|
|
def leave(self, p):
|
|
close_project(p)
|
|
delete_project(p)
|
|
|
|
|
|
# encoding
|
|
|
|
|
|
def test_utf8(self):
|
|
p = 'test_utf8'
|
|
self.enter(p)
|
|
|
|
write(p, f"create table {p} (a varchar(32))")
|
|
write(p, f"insert into {p} values ('你好')")
|
|
result = read_all(p, f"select * from {p}")
|
|
assert result == [{'a': '你好'}]
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# project
|
|
|
|
|
|
def test_project(self):
|
|
p = 'test_project'
|
|
|
|
assert not have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
create_project(p)
|
|
|
|
assert have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
open_project(p)
|
|
|
|
assert have_project(p)
|
|
assert is_project_open(p)
|
|
|
|
close_project(p)
|
|
|
|
assert have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
delete_project(p)
|
|
|
|
assert not have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
|
|
def test_project_name(self):
|
|
p = 'test_PROJECT_name'
|
|
|
|
assert not have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
create_project(p)
|
|
|
|
assert have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
open_project(p)
|
|
|
|
assert have_project(p)
|
|
assert is_project_open(p)
|
|
|
|
close_project(p)
|
|
|
|
assert have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
delete_project(p)
|
|
|
|
assert not have_project(p)
|
|
assert not is_project_open(p)
|
|
|
|
|
|
# operation
|
|
|
|
|
|
def test_snapshot(self):
|
|
p = "test_snapshot"
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
op_4 = get_current_operation(p)
|
|
assert op_4 == 4
|
|
take_snapshot(p, 'x')
|
|
assert get_snapshot_by_operation(p, 4) == 'x'
|
|
assert get_operation_by_snapshot(p, 'x') == 4
|
|
update_snapshot_for_current_operation(p, 'y')
|
|
assert get_snapshot_by_operation(p, 4) == 'y'
|
|
|
|
execute_undo(p)
|
|
execute_undo(p)
|
|
add_junction(p, ChangeSet({'id': 'j5', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j6', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
op_6 = get_current_operation(p)
|
|
assert op_6 == 6
|
|
take_snapshot(p, 'xx')
|
|
assert get_snapshot_by_operation(p, 6) == 'xx'
|
|
assert get_operation_by_snapshot(p, 'xx') == 6
|
|
|
|
cs = sync_with_server(p, op_4).operations
|
|
cs[0]['operation'] = API_DELETE
|
|
cs[0]['id'] = 'j4'
|
|
cs[1]['operation'] = API_DELETE
|
|
cs[1]['id'] = 'j3'
|
|
cs[2]['operation'] = API_ADD
|
|
cs[2]['id'] = 'j5'
|
|
cs[3]['operation'] = API_ADD
|
|
cs[3]['id'] = 'j6'
|
|
|
|
cs = pick_snapshot(p, 'y').operations
|
|
cs[0]['operation'] = 'delete'
|
|
cs[0]['id'] = 'j6'
|
|
cs[1]['operation'] = 'delete'
|
|
cs[1]['id'] = 'j5'
|
|
cs[2]['operation'] = 'add'
|
|
cs[2]['id'] = 'j3'
|
|
cs[3]['operation'] = 'add'
|
|
cs[3]['id'] = 'j4'
|
|
|
|
assert get_nodes(p) == ['j1', 'j2', 'j3', 'j4']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_batch_commands(self):
|
|
p = 'test_batch_commands'
|
|
self.enter(p)
|
|
|
|
cs = ChangeSet()
|
|
cs.add({'type': JUNCTION, 'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0})
|
|
cs.add({'type': JUNCTION, 'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0})
|
|
cs.add({'type': JUNCTION, 'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}) # fail
|
|
|
|
cs = execute_batch_commands(p, cs)
|
|
assert len(cs.operations) == 2
|
|
|
|
cs = ChangeSet()
|
|
cs.delete({'type': JUNCTION, 'id': 'j1'})
|
|
cs.delete({'type': JUNCTION, 'id': 'j2'})
|
|
|
|
cs = execute_batch_commands(p, cs)
|
|
assert len(cs.operations) == 2
|
|
|
|
cs = execute_undo(p)
|
|
assert len(cs.operations) == 1
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_batch_command(self):
|
|
p = 'test_batch_command'
|
|
self.enter(p)
|
|
|
|
cs = ChangeSet()
|
|
cs.add({'type': JUNCTION, 'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0})
|
|
cs.add({'type': JUNCTION, 'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0})
|
|
cs.add({'type': JUNCTION, 'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}) # fail
|
|
|
|
cs = execute_batch_command(p, cs)
|
|
assert len(cs.operations) == 2
|
|
|
|
assert get_current_operation(p) == 1
|
|
|
|
cs = ChangeSet()
|
|
cs.delete({'type': JUNCTION, 'id': 'j1'})
|
|
cs.delete({'type': JUNCTION, 'id': 'j2'})
|
|
|
|
cs = execute_batch_command(p, cs)
|
|
|
|
assert get_current_operation(p) == 2
|
|
|
|
cs = execute_undo(p)
|
|
assert get_current_operation(p) == 1
|
|
|
|
cs = execute_undo(p)
|
|
assert get_current_operation(p) == 0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# extension_data
|
|
|
|
|
|
def test_extension_data(self):
|
|
p = 'test_extension_data'
|
|
self.enter(p)
|
|
|
|
assert get_all_extension_data_keys(p) == []
|
|
assert get_all_extension_data(p) == {}
|
|
assert get_extension_data(p, '') == None
|
|
|
|
set_extension_data(p, ChangeSet({'key': 'key', 'value': None}))
|
|
assert get_extension_data(p, 'key') == None
|
|
|
|
set_extension_data(p, ChangeSet({'key': 'key', 'value': ''}))
|
|
assert get_extension_data(p, 'key') == ''
|
|
|
|
set_extension_data(p, ChangeSet({'key': 'key', 'value': 'value'}))
|
|
assert get_extension_data(p, 'key') == 'value'
|
|
|
|
set_extension_data(p, ChangeSet({'key': 'key', 'value': 'val'}))
|
|
assert get_extension_data(p, 'key') == 'val'
|
|
|
|
set_extension_data(p, ChangeSet({'key': 'key1', 'value': 'val1'}))
|
|
assert get_extension_data(p, 'key1') == 'val1'
|
|
|
|
assert get_all_extension_data_keys(p) == ['key', 'key1']
|
|
assert get_all_extension_data(p) == {'key': 'val', 'key1': 'val1'}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_extension_data_op(self):
|
|
p = 'test_extension_data_op'
|
|
self.enter(p)
|
|
|
|
cs = set_extension_data(p, ChangeSet({'key': 'key', 'value': ''})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'extension_data'
|
|
assert cs['key'] == 'key'
|
|
assert cs['value'] == ''
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'extension_data'
|
|
assert cs['key'] == 'key'
|
|
assert cs['value'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'extension_data'
|
|
assert cs['key'] == 'key'
|
|
assert cs['value'] == ''
|
|
|
|
cs = set_extension_data(p, ChangeSet({'key': 'key', 'value': 'value'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'extension_data'
|
|
assert cs['key'] == 'key'
|
|
assert cs['value'] == 'value'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'extension_data'
|
|
assert cs['key'] == 'key'
|
|
assert cs['value'] == ''
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'extension_data'
|
|
assert cs['key'] == 'key'
|
|
assert cs['value'] == 'value'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# complex test
|
|
|
|
|
|
def test_delete_node_link_then_restore(self):
|
|
p = 'test_remove_node_link_then_restore'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = []
|
|
links = []
|
|
|
|
nodes.append('131')
|
|
links += get_node_links(p, nodes[-1])
|
|
delete_junction(p, ChangeSet({'id': '131'}))
|
|
|
|
links.append('137')
|
|
delete_pipe(p, ChangeSet({'id': '137'}))
|
|
|
|
nodes.append('129')
|
|
links += get_node_links(p, nodes[-1])
|
|
delete_junction(p, ChangeSet({'id': '129'}))
|
|
|
|
nodes.append('127')
|
|
links += get_node_links(p, nodes[-1])
|
|
delete_junction(p, ChangeSet({'id': '127'}))
|
|
|
|
links.append('135')
|
|
delete_pipe(p, ChangeSet({'id': '135'}))
|
|
|
|
links.append('135')
|
|
delete_pipe(p, ChangeSet({'id': '133'}))
|
|
|
|
nodes.append('20')
|
|
links += get_node_links(p, nodes[-1])
|
|
delete_junction(p, ChangeSet({'id': '20'}))
|
|
|
|
nodes.append('3')
|
|
links += get_node_links(p, nodes[-1])
|
|
delete_tank(p, ChangeSet({'id': '3'}))
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node) == False
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_nodes_then_restore(self):
|
|
p = 'test_delete_nodes_then_restore'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = get_nodes(p)
|
|
links = get_links(p)
|
|
|
|
for _ in range(10):
|
|
random.shuffle(nodes)
|
|
for node in nodes:
|
|
if is_junction(p, node):
|
|
delete_junction(p, ChangeSet({'id': node}))
|
|
if is_reservoir(p, node):
|
|
delete_reservoir(p, ChangeSet({'id': node}))
|
|
if is_tank(p, node):
|
|
delete_tank(p, ChangeSet({'id': node}))
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node) == False
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_nodes(p) == []
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_links_then_restore(self):
|
|
p = 'test_delete_links_then_restore'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = get_nodes(p)
|
|
links = get_links(p)
|
|
|
|
for _ in range(10):
|
|
random.shuffle(links)
|
|
for link in links:
|
|
if is_pipe(p, link):
|
|
delete_pipe(p, ChangeSet({'id': link}))
|
|
if is_pump(p, link):
|
|
delete_pump(p, ChangeSet({'id': link}))
|
|
if is_valve(p, link):
|
|
delete_valve(p, ChangeSet({'id': link}))
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_nodes_then_restore_commands(self):
|
|
p = 'test_delete_nodes_then_restore_commands'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = get_nodes(p)
|
|
links = get_links(p)
|
|
|
|
for _ in range(10):
|
|
random.shuffle(nodes)
|
|
|
|
batch = ChangeSet()
|
|
for node in nodes:
|
|
if is_junction(p, node):
|
|
batch.delete({'type' : 'junction', 'id': node })
|
|
if is_reservoir(p, node):
|
|
batch.delete({'type' : 'reservoir', 'id': node })
|
|
if is_tank(p, node):
|
|
batch.delete({'type' : 'tank', 'id': node })
|
|
execute_batch_commands(p, batch)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node) == False
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_nodes(p) == []
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_links_then_restore_commands(self):
|
|
p = 'test_delete_links_then_restore_commands'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = get_nodes(p)
|
|
links = get_links(p)
|
|
|
|
for _ in range(10):
|
|
random.shuffle(links)
|
|
|
|
batch = ChangeSet()
|
|
for link in links:
|
|
if is_pipe(p, link):
|
|
batch.delete({'type' : 'pipe', 'id': link })
|
|
if is_pump(p, link):
|
|
batch.delete({'type' : 'pump', 'id': link })
|
|
if is_valve(p, link):
|
|
batch.delete({'type' : 'valve', 'id': link })
|
|
execute_batch_commands(p, batch)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_nodes_then_restore_command(self):
|
|
p = 'test_delete_nodes_then_restore_commands'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = get_nodes(p)
|
|
links = get_links(p)
|
|
|
|
for _ in range(10):
|
|
random.shuffle(nodes)
|
|
|
|
batch = ChangeSet()
|
|
for node in nodes:
|
|
if is_junction(p, node):
|
|
batch.delete({'type' : 'junction', 'id': node })
|
|
if is_reservoir(p, node):
|
|
batch.delete({'type' : 'reservoir', 'id': node })
|
|
if is_tank(p, node):
|
|
batch.delete({'type' : 'tank', 'id': node })
|
|
execute_batch_command(p, batch)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node) == False
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_nodes(p) == []
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_links_then_restore_command(self):
|
|
p = 'test_delete_links_then_restore_commands'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nodes = get_nodes(p)
|
|
links = get_links(p)
|
|
|
|
for _ in range(10):
|
|
random.shuffle(links)
|
|
|
|
batch = ChangeSet()
|
|
for link in links:
|
|
if is_pipe(p, link):
|
|
batch.delete({'type' : 'pipe', 'id': link })
|
|
if is_pump(p, link):
|
|
batch.delete({'type' : 'pump', 'id': link })
|
|
if is_valve(p, link):
|
|
batch.delete({'type' : 'valve', 'id': link })
|
|
execute_batch_command(p, batch)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_nodes_links_then_restore_v2(self):
|
|
p = 'test_delete_nodes_links_then_restore_v2'
|
|
read_inp(p, f'./inp/net3.inp', '2')
|
|
|
|
open_project(p)
|
|
|
|
nls : list[tuple[str, str]] = []
|
|
|
|
nodes = get_nodes(p)
|
|
for node in nodes:
|
|
nls.append(('node', node))
|
|
|
|
links = get_links(p)
|
|
for link in links:
|
|
nls.append(('link', link))
|
|
|
|
for _ in range(10):
|
|
random.shuffle(nls)
|
|
for nl in nls:
|
|
if nl[0] == 'node':
|
|
node = nl[1]
|
|
if is_junction(p, node):
|
|
delete_junction(p, ChangeSet({'id': node}))
|
|
if is_reservoir(p, node):
|
|
delete_reservoir(p, ChangeSet({'id': node}))
|
|
if is_tank(p, node):
|
|
delete_tank(p, ChangeSet({'id': node}))
|
|
else:
|
|
link = nl[1]
|
|
if is_pipe(p, link):
|
|
delete_pipe(p, ChangeSet({'id': link}))
|
|
if is_pump(p, link):
|
|
delete_pump(p, ChangeSet({'id': link}))
|
|
if is_valve(p, link):
|
|
delete_valve(p, ChangeSet({'id': link}))
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node) == False
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_nodes(p) == []
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_delete_nodes_links_then_restore_v3(self):
|
|
p = 'test_delete_nodes_links_then_restore_v3'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
|
|
open_project(p)
|
|
|
|
nls : list[tuple[str, str]] = []
|
|
|
|
nodes = get_nodes(p)
|
|
for node in nodes:
|
|
nls.append(('node', node))
|
|
|
|
links = get_links(p)
|
|
for link in links:
|
|
nls.append(('link', link))
|
|
|
|
for _ in range(10):
|
|
random.shuffle(nls)
|
|
for nl in nls:
|
|
if nl[0] == 'node':
|
|
node = nl[1]
|
|
if is_junction(p, node):
|
|
delete_junction(p, ChangeSet({'id': node}))
|
|
if is_reservoir(p, node):
|
|
delete_reservoir(p, ChangeSet({'id': node}))
|
|
if is_tank(p, node):
|
|
delete_tank(p, ChangeSet({'id': node}))
|
|
else:
|
|
link = nl[1]
|
|
if is_pipe(p, link):
|
|
delete_pipe(p, ChangeSet({'id': link}))
|
|
if is_pump(p, link):
|
|
delete_pump(p, ChangeSet({'id': link}))
|
|
if is_valve(p, link):
|
|
delete_valve(p, ChangeSet({'id': link}))
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node) == False
|
|
for link in links:
|
|
assert is_link(p, link) == False
|
|
|
|
assert get_nodes(p) == []
|
|
assert get_links(p) == []
|
|
|
|
op = get_restore_operation(p)
|
|
pick_operation(p, op)
|
|
|
|
for node in nodes:
|
|
assert is_node(p, node)
|
|
for link in links:
|
|
assert is_link(p, link)
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 1 title
|
|
|
|
|
|
def test_title(self):
|
|
p = 'test_title'
|
|
self.enter(p)
|
|
|
|
assert get_title(p)['value'] == ''
|
|
|
|
change = set_title(p, ChangeSet({'value': 'title'})).operations[0]
|
|
assert change['operation'] == 'update'
|
|
assert change['type'] == 'title'
|
|
assert get_title(p)['value'] == 'title'
|
|
|
|
set_title(p, ChangeSet({'value': 'test'}))
|
|
assert get_title(p)['value'] == 'test'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_title_op(self):
|
|
p = 'test_title_op'
|
|
self.enter(p)
|
|
|
|
assert get_title(p)['value'] == ''
|
|
|
|
cs = set_title(p, ChangeSet({'value': 'title'})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == 'title'
|
|
assert cs['value'] == 'title'
|
|
assert get_title(p)['value'] == 'title'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == 'title'
|
|
assert cs['value'] == ''
|
|
assert get_title(p)['value'] == ''
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == 'title'
|
|
assert cs['value'] == 'title'
|
|
assert get_title(p)['value'] == 'title'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == 'title'
|
|
assert cs['value'] == ''
|
|
assert get_title(p)['value'] == ''
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
assert get_title(p)['value'] == ''
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 2 junction
|
|
|
|
|
|
def test_junction(self):
|
|
p = 'test_junction'
|
|
self.enter(p)
|
|
|
|
assert get_junction(p, 'j0') == {}
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
j0 = get_junction(p, 'j0')
|
|
assert j0['x'] == 0.0
|
|
assert j0['y'] == 10.0
|
|
assert j0['elevation'] == 20.0
|
|
assert j0['links'] == []
|
|
|
|
set_junction(p, ChangeSet({'id': 'j0', 'x': 100.0, 'y': 200.0}))
|
|
j0 = get_junction(p, 'j0')
|
|
assert j0['x'] == 100.0
|
|
assert j0['y'] == 200.0
|
|
|
|
set_junction(p, ChangeSet({'id': 'j0', 'elevation': 100.0}))
|
|
j0 = get_junction(p, 'j0')
|
|
assert j0['elevation'] == 100.0
|
|
|
|
# TODO: pattern
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 2
|
|
assert nodes[0] == 'j0'
|
|
assert nodes[1] == 'j1'
|
|
assert is_junction(p, 'j0')
|
|
assert is_junction(p, 'j1')
|
|
|
|
delete_junction(p, ChangeSet({'id': 'j1'}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
assert nodes[0] == 'j0'
|
|
|
|
delete_junction(p, ChangeSet({'id': 'j0'}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 0
|
|
|
|
assert get_junction(p, 'j0') == {}
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
add_pump(p, ChangeSet({'id': 'p2', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
|
add_valve(p, ChangeSet({'id': 'v1', 'node1': 'j2', 'node2': 'j3', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': 0.1, 'minor_loss': 0.5 }))
|
|
assert get_junction(p, 'j1')['links'] == ['p1', 'p2']
|
|
assert get_junction(p, 'j2')['links'] == ['p1', 'p2', 'v1']
|
|
assert get_junction(p, 'j3')['links'] == ['v1']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_junction_op(self):
|
|
p = 'test_junction_op'
|
|
self.enter(p)
|
|
|
|
cs = add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0})).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 0
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'demand': 100.0}))
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
|
|
cs = delete_junction(p, ChangeSet({'id': 'j0'})).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
|
|
cs = set_junction(p, ChangeSet({'id': 'j0', 'x': 100.0, 'y': 200.0})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
assert cs['x'] == 100.0
|
|
assert cs['y'] == 200.0
|
|
assert cs['elevation'] == 20.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == JUNCTION
|
|
assert cs['id'] == 'j0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_junction_del(self):
|
|
p = 'test_junction_del'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j0', 'node2': 'j1', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_NODE, 'id': 'j0', 'tag': 'j0t' }))
|
|
set_demand(p, ChangeSet({'junction': 'j0', 'demands': [{'demand': 10.0, 'pattern': None, 'category': 'x'}, {'demand': 20.0, 'pattern': None, 'category': None}]}))
|
|
set_emitter(p, ChangeSet({'junction': 'j0', 'coefficient': 10.0}))
|
|
set_quality(p, ChangeSet({'node': 'j0', 'quality': 10.0}))
|
|
add_source(p, ChangeSet({'node': 'j0', 's_type': SOURCE_TYPE_CONCEN, 'strength': 10.0, 'pattern': None }))
|
|
add_label(p, ChangeSet({'x': 0.0, 'y': 0.0, 'label': 'x', 'node': 'j0'}))
|
|
assert is_junction(p, 'j0')
|
|
assert is_junction(p, 'j1')
|
|
assert is_pipe(p, 'p0')
|
|
assert get_tag(p, TAG_TYPE_NODE, 'j0')['tag'] == 'j0t'
|
|
assert get_demand(p, 'j0')['demands'] == [{'demand': 10.0, 'pattern': None, 'category': 'x'}, {'demand': 20.0, 'pattern': None, 'category': None}]
|
|
assert get_emitter(p, 'j0')['coefficient'] == 10.0
|
|
assert get_quality(p, 'j0')['quality'] == 10.0
|
|
assert get_source(p, 'j0')['s_type'] == SOURCE_TYPE_CONCEN
|
|
assert get_label(p, 0.0, 0.0)['node'] == 'j0'
|
|
|
|
delete_junction(p, ChangeSet({'id': 'j0'}))
|
|
assert is_junction(p, 'j0') == False
|
|
assert is_junction(p, 'j1')
|
|
assert is_pipe(p, 'p0') == False
|
|
assert get_tag(p, TAG_TYPE_NODE, 'j0')['tag'] == None
|
|
assert get_demand(p, 'j1')['demands'] == []
|
|
assert get_emitter(p, 'j0')['coefficient'] == None
|
|
assert get_quality(p, 'j0')['quality'] == None
|
|
assert get_source(p, 'j0') == {}
|
|
assert get_label(p, 0.0, 0.0)['node'] == None
|
|
|
|
execute_undo(p)
|
|
assert is_junction(p, 'j0')
|
|
assert is_junction(p, 'j1')
|
|
assert is_pipe(p, 'p0')
|
|
assert get_tag(p, TAG_TYPE_NODE, 'j0')['tag'] == 'j0t'
|
|
assert get_demand(p, 'j0')['demands'] == [{'demand': 10.0, 'pattern': None, 'category': 'x'}, {'demand': 20.0, 'pattern': None, 'category': None}]
|
|
assert get_emitter(p, 'j0')['coefficient'] == 10.0
|
|
assert get_quality(p, 'j0')['quality'] == 10.0
|
|
assert get_source(p, 'j0')['s_type'] == SOURCE_TYPE_CONCEN
|
|
assert get_label(p, 0.0, 0.0)['node'] == 'j0'
|
|
|
|
execute_redo(p)
|
|
assert is_junction(p, 'j0') == False
|
|
assert is_junction(p, 'j1')
|
|
assert is_pipe(p, 'p0') == False
|
|
assert get_tag(p, TAG_TYPE_NODE, 'j0')['tag'] == None
|
|
assert get_demand(p, 'j1')['demands'] == []
|
|
assert get_emitter(p, 'j0')['coefficient'] == None
|
|
assert get_quality(p, 'j0')['quality'] == None
|
|
assert get_source(p, 'j0') == {}
|
|
assert get_label(p, 0.0, 0.0)['node'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 3 reservoir
|
|
|
|
|
|
def test_reservoir(self):
|
|
p = 'test_reservoir'
|
|
self.enter(p)
|
|
|
|
assert get_reservoir(p, 'r0') == {}
|
|
|
|
add_reservoir(p, ChangeSet({'id': 'r0', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
r0 = get_reservoir(p, 'r0')
|
|
assert r0['x'] == 0.0
|
|
assert r0['y'] == 10.0
|
|
assert r0['head'] == 20.0
|
|
assert r0['pattern'] == None
|
|
assert r0['links'] == []
|
|
|
|
set_reservoir(p, ChangeSet({'id': 'r0', 'x': 100.0, 'y': 200.0}))
|
|
r0 = get_reservoir(p, 'r0')
|
|
assert r0['x'] == 100.0
|
|
assert r0['y'] == 200.0
|
|
|
|
set_reservoir(p, ChangeSet({'id': 'r0', 'head': 100.0}))
|
|
r0 = get_reservoir(p, 'r0')
|
|
assert r0['head'] == 100.0
|
|
|
|
# TODO: pattern
|
|
|
|
add_reservoir(p, ChangeSet({'id': 'r1', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 2
|
|
assert nodes[0] == 'r0'
|
|
assert nodes[1] == 'r1'
|
|
assert is_reservoir(p, 'r0')
|
|
assert is_reservoir(p, 'r1')
|
|
|
|
delete_reservoir(p, ChangeSet({'id': 'r1'}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
assert nodes[0] == 'r0'
|
|
|
|
delete_reservoir(p, ChangeSet({'id': 'r0'}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 0
|
|
|
|
assert get_reservoir(p, 'r0') == {}
|
|
|
|
add_reservoir(p, ChangeSet({'id': 'r1', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
add_reservoir(p, ChangeSet({'id': 'r2', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
add_reservoir(p, ChangeSet({'id': 'r3', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'r1', 'node2': 'r2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
add_pump(p, ChangeSet({'id': 'p2', 'node1': 'r1', 'node2': 'r2', 'power': 0.0}))
|
|
add_valve(p, ChangeSet({'id': 'v1', 'node1': 'r2', 'node2': 'r3', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': 0.1, 'minor_loss': 0.5 }))
|
|
assert get_reservoir(p, 'r1')['links'] == ['p1', 'p2']
|
|
assert get_reservoir(p, 'r2')['links'] == ['p1', 'p2', 'v1']
|
|
assert get_reservoir(p, 'r3')['links'] == ['v1']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_reservoir_op(self):
|
|
p = 'test_reservoir_op'
|
|
self.enter(p)
|
|
|
|
cs = add_reservoir(p, ChangeSet({'id': 'r0', 'x': 0.0, 'y': 10.0, 'head': 20.0})).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['head'] == 20.0
|
|
assert cs['pattern'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['head'] == 20.0
|
|
assert cs['pattern'] == None
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 0
|
|
|
|
add_reservoir(p, ChangeSet({'id': 'r0', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
|
|
cs = delete_reservoir(p, ChangeSet({'id': 'r0'})).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['head'] == 20.0
|
|
assert cs['pattern'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['head'] == 20.0
|
|
assert cs['pattern'] == None
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
|
|
cs = set_reservoir(p, ChangeSet({'id': 'r0', 'x': 100.0, 'y': 200.0})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
assert cs['x'] == 100.0
|
|
assert cs['y'] == 200.0
|
|
assert cs['head'] == 20.0
|
|
assert cs['pattern'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == RESERVOIR
|
|
assert cs['id'] == 'r0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['head'] == 20.0
|
|
assert cs['pattern'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_reservoir_del(self):
|
|
p = 'test_reservoir_del'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_reservoir(p, ChangeSet({'id': 'r0', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j0', 'node2': 'r0', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
assert is_junction(p, 'j0')
|
|
assert is_reservoir(p, 'r0')
|
|
assert is_pipe(p, 'p0')
|
|
|
|
delete_reservoir(p, ChangeSet({'id': 'r0'}))
|
|
assert is_junction(p, 'j0')
|
|
assert is_reservoir(p, 'r0') == False
|
|
assert is_pipe(p, 'p0') == False
|
|
|
|
execute_undo(p)
|
|
assert is_junction(p, 'j0')
|
|
assert is_reservoir(p, 'r0')
|
|
assert is_pipe(p, 'p0')
|
|
|
|
execute_redo(p)
|
|
assert is_junction(p, 'j0')
|
|
assert is_reservoir(p, 'r0') == False
|
|
assert is_pipe(p, 'p0') == False
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 4 tank
|
|
|
|
|
|
def test_tank(self):
|
|
p = 'test_tank'
|
|
self.enter(p)
|
|
|
|
assert get_tank(p, 't0') == {}
|
|
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['x'] == 0.0
|
|
assert t0['y'] == 10.0
|
|
assert t0['elevation'] == 20.0
|
|
assert t0['init_level'] == 1.0
|
|
assert t0['min_level'] == 0.0
|
|
assert t0['max_level'] == 2.0
|
|
assert t0['diameter'] == 10.0
|
|
assert t0['min_vol'] == 100.0
|
|
assert t0['vol_curve'] == None
|
|
assert t0['overflow'] == OVERFLOW_NO
|
|
assert t0['links'] == []
|
|
|
|
set_tank(p, ChangeSet({'id': 't0', 'x': 100.0, 'y': 200.0}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['x'] == 100.0
|
|
assert t0['y'] == 200.0
|
|
|
|
set_tank(p, ChangeSet({'id': 't0', 'elevation': 100.0}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['elevation'] == 100.0
|
|
|
|
set_tank(p, ChangeSet({'id': 't0', 'init_level': 100.0, 'min_level': 50.0, 'max_level': 200.0}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['init_level'] == 100.0
|
|
assert t0['min_level'] == 50.0
|
|
assert t0['max_level'] == 200.0
|
|
|
|
set_tank(p, ChangeSet({'id': 't0', 'diameter': 100.0}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['diameter'] == 100.0
|
|
|
|
set_tank(p, ChangeSet({'id': 't0', 'min_vol': 200.0}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['min_vol'] == 200.0
|
|
|
|
# TODO: vol_curve
|
|
|
|
set_tank(p, ChangeSet({'id': 't0', 'overflow': OVERFLOW_YES}))
|
|
t0 = get_tank(p, 't0')
|
|
assert t0['overflow'] == OVERFLOW_YES
|
|
|
|
add_tank(p, ChangeSet({'id': 't1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 2
|
|
assert nodes[0] == 't0'
|
|
assert nodes[1] == 't1'
|
|
assert is_tank(p, 't0')
|
|
assert is_tank(p, 't1')
|
|
|
|
delete_tank(p, ChangeSet({'id': 't1'}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
assert nodes[0] == 't0'
|
|
|
|
delete_tank(p, ChangeSet({'id': 't0'}))
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 0
|
|
|
|
assert get_tank(p, 't0') == {}
|
|
|
|
add_tank(p, ChangeSet({'id': 't1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
add_tank(p, ChangeSet({'id': 't2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
add_tank(p, ChangeSet({'id': 't3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 't1', 'node2': 't2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
add_pump(p, ChangeSet({'id': 'p2', 'node1': 't1', 'node2': 't2', 'power': 0.0}))
|
|
add_valve(p, ChangeSet({'id': 'v1', 'node1': 't2', 'node2': 't3', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': 0.1, 'minor_loss': 0.5 }))
|
|
assert get_tank(p, 't1')['links'] == ['p1', 'p2']
|
|
assert get_tank(p, 't2')['links'] == ['p1', 'p2', 'v1']
|
|
assert get_tank(p, 't3')['links'] == ['v1']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_tank_op(self):
|
|
p = 'test_tank_op'
|
|
self.enter(p)
|
|
|
|
cs = add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO})).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
assert cs['init_level'] == 1.0
|
|
assert cs['min_level'] == 0.0
|
|
assert cs['max_level'] == 2.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['min_vol'] == 100.0
|
|
assert cs['vol_curve'] == None
|
|
assert cs['overflow'] == OVERFLOW_NO
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
assert cs['init_level'] == 1.0
|
|
assert cs['min_level'] == 0.0
|
|
assert cs['max_level'] == 2.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['min_vol'] == 100.0
|
|
assert cs['vol_curve'] == None
|
|
assert cs['overflow'] == OVERFLOW_NO
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 0
|
|
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
|
|
cs = delete_tank(p, ChangeSet({'id': 't0'})).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
assert cs['init_level'] == 1.0
|
|
assert cs['min_level'] == 0.0
|
|
assert cs['max_level'] == 2.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['min_vol'] == 100.0
|
|
assert cs['vol_curve'] == None
|
|
assert cs['overflow'] == OVERFLOW_NO
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
assert cs['init_level'] == 1.0
|
|
assert cs['min_level'] == 0.0
|
|
assert cs['max_level'] == 2.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['min_vol'] == 100.0
|
|
assert cs['vol_curve'] == None
|
|
assert cs['overflow'] == OVERFLOW_NO
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
nodes = get_nodes(p)
|
|
assert len(nodes) == 1
|
|
|
|
cs = set_tank(p, ChangeSet({'id': 't0', 'x': 100.0, 'y': 200.0})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
assert cs['x'] == 100.0
|
|
assert cs['y'] == 200.0
|
|
assert cs['elevation'] == 20.0
|
|
assert cs['init_level'] == 1.0
|
|
assert cs['min_level'] == 0.0
|
|
assert cs['max_level'] == 2.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['min_vol'] == 100.0
|
|
assert cs['vol_curve'] == None
|
|
assert cs['overflow'] == OVERFLOW_NO
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == TANK
|
|
assert cs['id'] == 't0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 10.0
|
|
assert cs['elevation'] == 20.0
|
|
assert cs['init_level'] == 1.0
|
|
assert cs['min_level'] == 0.0
|
|
assert cs['max_level'] == 2.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['min_vol'] == 100.0
|
|
assert cs['vol_curve'] == None
|
|
assert cs['overflow'] == OVERFLOW_NO
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_tank_del(self):
|
|
p = 'test_tank_del'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j0', 'node2': 't0', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
set_tank_reaction(p, ChangeSet({'tank': 't0', 'value': 10.0}))
|
|
assert is_junction(p, 'j0')
|
|
assert is_tank(p, 't0')
|
|
assert is_pipe(p, 'p0')
|
|
assert get_tank_reaction(p, 't0')['value'] == 10.0
|
|
|
|
delete_tank(p, ChangeSet({'id': 't0'}))
|
|
assert is_junction(p, 'j0')
|
|
assert is_tank(p, 't0') == False
|
|
assert is_pipe(p, 'p0') == False
|
|
assert get_tank_reaction(p, 't0')['value'] == None
|
|
|
|
execute_undo(p)
|
|
assert is_junction(p, 'j0')
|
|
assert is_tank(p, 't0')
|
|
assert is_pipe(p, 'p0')
|
|
assert get_tank_reaction(p, 't0')['value'] == 10.0
|
|
|
|
execute_redo(p)
|
|
assert is_junction(p, 'j0')
|
|
assert is_tank(p, 't0') == False
|
|
assert is_pipe(p, 'p0') == False
|
|
assert get_tank_reaction(p, 't0')['value'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 5 pipe
|
|
|
|
|
|
def test_pipe(self):
|
|
p = 'test_pipe'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
assert is_junction(p, 'j3')
|
|
assert is_junction(p, 'j4')
|
|
|
|
assert get_pipe(p, 'p0') == {}
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['node1'] == 'j1'
|
|
assert p0['node2'] == 'j2'
|
|
assert p0['length'] == 100.0
|
|
assert p0['diameter'] == 10.0
|
|
assert p0['roughness'] == 0.1
|
|
assert p0['minor_loss'] == 0.5
|
|
assert p0['status'] == PIPE_STATUS_OPEN
|
|
|
|
set_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j3', 'node2': 'j4'}))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['node1'] == 'j3'
|
|
assert p0['node2'] == 'j4'
|
|
|
|
set_pipe(p, ChangeSet({'id': 'p0', 'length': 200.0}))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['length'] == 200.0
|
|
|
|
set_pipe(p, ChangeSet({'id': 'p0', 'diameter': 100.0}))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['diameter'] == 100.0
|
|
|
|
set_pipe(p, ChangeSet({'id': 'p0', 'roughness': 0.2}))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['roughness'] == 0.2
|
|
|
|
set_pipe(p, ChangeSet({'id': 'p0', 'minor_loss': 0.1}))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['minor_loss'] == 0.1
|
|
|
|
set_pipe(p, ChangeSet({'id': 'p0', 'status': PIPE_STATUS_CLOSED}))
|
|
p0 = get_pipe(p, 'p0')
|
|
assert p0['status'] == PIPE_STATUS_CLOSED
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
links = get_links(p)
|
|
assert len(links) == 2
|
|
assert links[0] == 'p0'
|
|
assert links[1] == 'p1'
|
|
assert is_pipe(p, 'p0')
|
|
assert is_pipe(p, 'p1')
|
|
|
|
delete_pipe(p, ChangeSet({'id': 'p1'}))
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
assert links[0] == 'p0'
|
|
|
|
delete_pipe(p, ChangeSet({'id': 'p0'}))
|
|
links = get_links(p)
|
|
assert len(links) == 0
|
|
|
|
assert get_pipe(p, 'p0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pipe_op(self):
|
|
p = 'test_pipe_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
assert is_junction(p, 'j3')
|
|
assert is_junction(p, 'j4')
|
|
|
|
cs = add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN })).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['length'] == 100.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['roughness'] == 0.1
|
|
assert cs['minor_loss'] == 0.5
|
|
assert cs['status'] == PIPE_STATUS_OPEN
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['length'] == 100.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['roughness'] == 0.1
|
|
assert cs['minor_loss'] == 0.5
|
|
assert cs['status'] == PIPE_STATUS_OPEN
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 0
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
|
|
cs = delete_pipe(p, ChangeSet({'id': 'p0'})).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['length'] == 100.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['roughness'] == 0.1
|
|
assert cs['minor_loss'] == 0.5
|
|
assert cs['status'] == PIPE_STATUS_OPEN
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['length'] == 100.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['roughness'] == 0.1
|
|
assert cs['minor_loss'] == 0.5
|
|
assert cs['status'] == PIPE_STATUS_OPEN
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
|
|
cs = set_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j3', 'node2': 'j4'})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j3'
|
|
assert cs['node2'] == 'j4'
|
|
assert cs['length'] == 100.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['roughness'] == 0.1
|
|
assert cs['minor_loss'] == 0.5
|
|
assert cs['status'] == PIPE_STATUS_OPEN
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == PIPE
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['length'] == 100.0
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['roughness'] == 0.1
|
|
assert cs['minor_loss'] == 0.5
|
|
assert cs['status'] == PIPE_STATUS_OPEN
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pipe_del(self):
|
|
p = 'test_pipe_del'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j0', 'node2': 'j1', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_LINK, 'id': 'p0', 'tag': 'p0t' }))
|
|
set_status(p, ChangeSet({'link': 'p0', 'status': LINK_STATUS_OPEN, 'setting': 10.0}))
|
|
set_pipe_reaction(p, ChangeSet({'pipe': 'p0', 'bulk': 10.0, 'wall': 20.0}))
|
|
set_vertex(p, ChangeSet({'link' : 'p0', 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
assert is_pipe(p, 'p0')
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == 'p0t'
|
|
assert get_status(p, 'p0')['status'] == LINK_STATUS_OPEN
|
|
assert get_status(p, 'p0')['setting'] == 10.0
|
|
assert get_pipe_reaction(p, 'p0')['bulk'] == 10.0
|
|
assert get_pipe_reaction(p, 'p0')['wall'] == 20.0
|
|
assert get_vertex(p, 'p0')['coords'] == [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]
|
|
|
|
delete_pipe(p, ChangeSet({'id': 'p0'}))
|
|
assert is_pipe(p, 'p0') == False
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == None
|
|
assert get_status(p, 'p0')['status'] == None
|
|
assert get_status(p, 'p0')['setting'] == None
|
|
assert get_pipe_reaction(p, 'p0')['bulk'] == None
|
|
assert get_pipe_reaction(p, 'p0')['wall'] == None
|
|
assert get_vertex(p, 'p0')['coords'] == []
|
|
|
|
execute_undo(p)
|
|
assert is_pipe(p, 'p0')
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == 'p0t'
|
|
assert get_status(p, 'p0')['status'] == LINK_STATUS_OPEN
|
|
assert get_status(p, 'p0')['setting'] == 10.0
|
|
assert get_pipe_reaction(p, 'p0')['bulk'] == 10.0
|
|
assert get_pipe_reaction(p, 'p0')['wall'] == 20.0
|
|
assert get_vertex(p, 'p0')['coords'] == [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]
|
|
|
|
execute_redo(p)
|
|
assert is_pipe(p, 'p0') == False
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == None
|
|
assert get_status(p, 'p0')['status'] == None
|
|
assert get_status(p, 'p0')['setting'] == None
|
|
assert get_pipe_reaction(p, 'p0')['bulk'] == None
|
|
assert get_pipe_reaction(p, 'p0')['wall'] == None
|
|
assert get_vertex(p, 'p0')['coords'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 6 pump
|
|
|
|
|
|
def test_pump(self):
|
|
p = 'test_pump'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
assert is_junction(p, 'j3')
|
|
assert is_junction(p, 'j4')
|
|
|
|
assert get_pump(p, 'p0') == {}
|
|
|
|
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
|
p0 = get_pump(p, 'p0')
|
|
assert p0['node1'] == 'j1'
|
|
assert p0['node2'] == 'j2'
|
|
assert p0['power'] == 0.0
|
|
assert p0['head'] == None
|
|
assert p0['speed'] == None
|
|
assert p0['pattern'] == None
|
|
|
|
set_pump(p, ChangeSet({'id': 'p0', 'node1': 'j3', 'node2': 'j4'}))
|
|
p0 = get_pump(p, 'p0')
|
|
assert p0['node1'] == 'j3'
|
|
assert p0['node2'] == 'j4'
|
|
|
|
set_pump(p, ChangeSet({'id': 'p0', 'power': 100.0}))
|
|
p0 = get_pump(p, 'p0')
|
|
assert p0['power'] == 100.0
|
|
|
|
add_pump(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
|
links = get_links(p)
|
|
assert len(links) == 2
|
|
assert links[0] == 'p0'
|
|
assert links[1] == 'p1'
|
|
assert is_pump(p, 'p0')
|
|
assert is_pump(p, 'p1')
|
|
|
|
delete_pump(p, ChangeSet({'id': 'p1'}))
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
assert links[0] == 'p0'
|
|
|
|
delete_pump(p, ChangeSet({'id': 'p0'}))
|
|
links = get_links(p)
|
|
assert len(links) == 0
|
|
|
|
assert get_pump(p, 'p0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pump_op(self):
|
|
p = 'test_pump_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
assert is_junction(p, 'j3')
|
|
assert is_junction(p, 'j4')
|
|
|
|
cs = add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0})).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['power'] == 0.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 0
|
|
|
|
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
|
|
cs = delete_pump(p, ChangeSet({'id': 'p0'})).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
|
|
cs = set_pump(p, ChangeSet({'id': 'p0', 'node1': 'j3', 'node2': 'j4'})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j3'
|
|
assert cs['node2'] == 'j4'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
|
|
cs = set_pump(p, ChangeSet({'id': 'p0', 'power': 100.0})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['power'] == 100.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == PUMP
|
|
assert cs['id'] == 'p0'
|
|
assert cs['power'] == 0.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pump_del(self):
|
|
p = 'test_pump_del'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j0', 'node2': 'j1', 'power': 0.0}))
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_LINK, 'id': 'p0', 'tag': 'p0t' }))
|
|
set_status(p, ChangeSet({'link': 'p0', 'status': LINK_STATUS_OPEN, 'setting': 10.0}))
|
|
set_pump_energy(p, ChangeSet({'pump' : 'p0', 'price': 1.0}))
|
|
set_vertex(p, ChangeSet({'link' : 'p0', 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
assert is_pump(p, 'p0')
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == 'p0t'
|
|
assert get_status(p, 'p0')['status'] == LINK_STATUS_OPEN
|
|
assert get_status(p, 'p0')['setting'] == 10.0
|
|
assert get_pump_energy(p, 'p0')['price'] == 1.0
|
|
assert get_vertex(p, 'p0')['coords'] == [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]
|
|
|
|
delete_pump(p, ChangeSet({'id': 'p0'}))
|
|
assert is_pump(p, 'p0') == False
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == None
|
|
assert get_status(p, 'p0')['status'] == None
|
|
assert get_status(p, 'p0')['setting'] == None
|
|
assert get_pump_energy(p, 'p0')['price'] == None
|
|
assert get_vertex(p, 'p0')['coords'] == []
|
|
|
|
execute_undo(p)
|
|
assert is_pump(p, 'p0')
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == 'p0t'
|
|
assert get_status(p, 'p0')['status'] == LINK_STATUS_OPEN
|
|
assert get_status(p, 'p0')['setting'] == 10.0
|
|
assert get_pump_energy(p, 'p0')['price'] == 1.0
|
|
assert get_vertex(p, 'p0')['coords'] == [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]
|
|
|
|
execute_redo(p)
|
|
assert is_pump(p, 'p0') == False
|
|
assert get_tag(p, TAG_TYPE_LINK, 'p0')['tag'] == None
|
|
assert get_status(p, 'p0')['status'] == None
|
|
assert get_status(p, 'p0')['setting'] == None
|
|
assert get_pump_energy(p, 'p0')['price'] == None
|
|
assert get_vertex(p, 'p0')['coords'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 7 valve
|
|
|
|
|
|
def test_valve(self):
|
|
p = 'test_valve'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
assert is_junction(p, 'j3')
|
|
assert is_junction(p, 'j4')
|
|
|
|
assert get_valve(p, 'v0') == {}
|
|
|
|
add_valve(p, ChangeSet({'id': 'v0', 'node1': 'j1', 'node2': 'j2', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': '0.1', 'minor_loss': 0.5 }))
|
|
v0 = get_valve(p, 'v0')
|
|
assert v0['node1'] == 'j1'
|
|
assert v0['node2'] == 'j2'
|
|
assert v0['diameter'] == 10.0
|
|
assert v0['v_type'] == VALVES_TYPE_FCV
|
|
assert v0['setting'] == '0.1'
|
|
assert v0['minor_loss'] == 0.5
|
|
|
|
set_valve(p, ChangeSet({'id': 'v0', 'node1': 'j3', 'node2': 'j4'}))
|
|
v0 = get_valve(p, 'v0')
|
|
assert v0['node1'] == 'j3'
|
|
assert v0['node2'] == 'j4'
|
|
|
|
set_valve(p, ChangeSet({'id': 'v0', 'diameter': 100.0}))
|
|
v0 = get_valve(p, 'v0')
|
|
assert v0['diameter'] == 100.0
|
|
|
|
set_valve(p, ChangeSet({'id': 'v0', 'v_type': VALVES_TYPE_GPV}))
|
|
v0 = get_valve(p, 'v0')
|
|
assert v0['v_type'] == VALVES_TYPE_GPV
|
|
|
|
set_valve(p, ChangeSet({'id': 'v0', 'setting': '0.2'}))
|
|
v0 = get_valve(p, 'v0')
|
|
assert v0['setting'] == '0.2'
|
|
|
|
set_valve(p, ChangeSet({'id': 'v0', 'minor_loss': 0.1}))
|
|
v0 = get_valve(p, 'v0')
|
|
assert v0['minor_loss'] == 0.1
|
|
|
|
add_valve(p, ChangeSet({'id': 'v1', 'node1': 'j1', 'node2': 'j2', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': '0.1', 'minor_loss': 0.5 }))
|
|
links = get_links(p)
|
|
assert len(links) == 2
|
|
assert links[0] == 'v0'
|
|
assert links[1] == 'v1'
|
|
assert is_valve(p, 'v0')
|
|
assert is_valve(p, 'v1')
|
|
|
|
delete_valve(p, ChangeSet({'id': 'v1'}))
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
assert links[0] == 'v0'
|
|
|
|
delete_valve(p, ChangeSet({'id': 'v0'}))
|
|
links = get_links(p)
|
|
assert len(links) == 0
|
|
|
|
assert get_valve(p, 'v0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_valve_op(self):
|
|
p = 'test_valve_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j4', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
assert is_junction(p, 'j3')
|
|
assert is_junction(p, 'j4')
|
|
|
|
cs = add_valve(p, ChangeSet({'id': 'v0', 'node1': 'j1', 'node2': 'j2', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': '0.1', 'minor_loss': 0.5 })).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['v_type'] == VALVES_TYPE_FCV
|
|
assert cs['setting'] == '0.1'
|
|
assert cs['minor_loss'] == 0.5
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['v_type'] == VALVES_TYPE_FCV
|
|
assert cs['setting'] == '0.1'
|
|
assert cs['minor_loss'] == 0.5
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 0
|
|
|
|
add_valve(p, ChangeSet({'id': 'v0', 'node1': 'j1', 'node2': 'j2', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': '0.1', 'minor_loss': 0.5 }))
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
|
|
cs = delete_valve(p, ChangeSet({'id': 'v0'})).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['v_type'] == VALVES_TYPE_FCV
|
|
assert cs['setting'] == '0.1'
|
|
assert cs['minor_loss'] == 0.5
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == 'delete'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
|
|
cs = execute_undo(p, True).operations[0]
|
|
assert cs['operation'] == 'add'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['v_type'] == VALVES_TYPE_FCV
|
|
assert cs['setting'] == '0.1'
|
|
assert cs['minor_loss'] == 0.5
|
|
|
|
cs = execute_redo(p)
|
|
assert len(cs.operations) == 0
|
|
|
|
links = get_links(p)
|
|
assert len(links) == 1
|
|
|
|
cs = set_valve(p, ChangeSet({'id': 'v0', 'node1': 'j3', 'node2': 'j4'})).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
assert cs['node1'] == 'j3'
|
|
assert cs['node2'] == 'j4'
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['v_type'] == VALVES_TYPE_FCV
|
|
assert cs['setting'] == '0.1'
|
|
assert cs['minor_loss'] == 0.5
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == 'update'
|
|
assert cs['type'] == VALVE
|
|
assert cs['id'] == 'v0'
|
|
assert cs['node1'] == 'j1'
|
|
assert cs['node2'] == 'j2'
|
|
assert cs['diameter'] == 10.0
|
|
assert cs['v_type'] == VALVES_TYPE_FCV
|
|
assert cs['setting'] == '0.1'
|
|
assert cs['minor_loss'] == 0.5
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_valve_del(self):
|
|
p = 'test_valve_del'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_valve(p, ChangeSet({'id': 'v0', 'node1': 'j0', 'node2': 'j1', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': '0.1', 'minor_loss': 0.5 }))
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_LINK, 'id': 'v0', 'tag': 'v0t' }))
|
|
set_status(p, ChangeSet({'link': 'v0', 'status': LINK_STATUS_OPEN, 'setting': 10.0}))
|
|
set_vertex(p, ChangeSet({'link' : 'v0', 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
assert is_valve(p, 'v0')
|
|
assert get_tag(p, TAG_TYPE_LINK, 'v0')['tag'] == 'v0t'
|
|
assert get_status(p, 'v0')['status'] == LINK_STATUS_OPEN
|
|
assert get_status(p, 'v0')['setting'] == 10.0
|
|
assert get_vertex(p, 'v0')['coords'] == [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]
|
|
|
|
delete_valve(p, ChangeSet({'id': 'v0'}))
|
|
assert is_valve(p, 'v0') == False
|
|
assert get_tag(p, TAG_TYPE_LINK, 'v0')['tag'] == None
|
|
assert get_status(p, 'v0')['status'] == None
|
|
assert get_status(p, 'v0')['setting'] == None
|
|
assert get_vertex(p, 'v0')['coords'] == []
|
|
|
|
execute_undo(p)
|
|
assert is_valve(p, 'v0')
|
|
assert get_tag(p, TAG_TYPE_LINK, 'v0')['tag'] == 'v0t'
|
|
assert get_status(p, 'v0')['status'] == LINK_STATUS_OPEN
|
|
assert get_status(p, 'v0')['setting'] == 10.0
|
|
assert get_vertex(p, 'v0')['coords'] == [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]
|
|
|
|
execute_redo(p)
|
|
assert is_valve(p, 'v0') == False
|
|
assert get_tag(p, TAG_TYPE_LINK, 'v0')['tag'] == None
|
|
assert get_status(p, 'v0')['status'] == None
|
|
assert get_status(p, 'v0')['setting'] == None
|
|
assert get_vertex(p, 'v0')['coords'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 8 tag
|
|
|
|
|
|
def test_tag(self):
|
|
p = 'test_tag'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
assert is_pipe(p, 'p0')
|
|
|
|
t = get_tag(p, TAG_TYPE_NODE, 'j1')
|
|
assert t['tag'] == None
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_NODE, 'id': 'j1', 'tag': 'j1t' }))
|
|
t = get_tag(p, TAG_TYPE_NODE, 'j1')
|
|
assert t['tag'] == 'j1t'
|
|
|
|
tags = get_tags(p)
|
|
assert len(tags) == 1
|
|
assert tags[0]['t_type'] == TAG_TYPE_NODE
|
|
assert tags[0]['id'] == 'j1'
|
|
assert tags[0]['tag'] == 'j1t'
|
|
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_NODE, 'id': 'j1', 'tag': None }))
|
|
t = get_tag(p, TAG_TYPE_NODE, 'j1')
|
|
assert t['tag'] == None
|
|
|
|
tags = get_tags(p)
|
|
assert len(tags) == 0
|
|
|
|
t = get_tag(p, TAG_TYPE_NODE, 'j2')
|
|
assert t['tag'] == None
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_NODE, 'id': 'j2', 'tag': 'j2t' }))
|
|
t = get_tag(p, TAG_TYPE_NODE, 'j2')
|
|
assert t['tag'] == 'j2t'
|
|
|
|
t = get_tag(p, TAG_TYPE_LINK, 'p0')
|
|
assert t['tag'] == None
|
|
set_tag(p, ChangeSet({'t_type': TAG_TYPE_LINK, 'id': 'p0', 'tag': 'p0t' }))
|
|
t = get_tag(p, TAG_TYPE_LINK, 'p0')
|
|
assert t['tag'] == 'p0t'
|
|
|
|
tags = get_tags(p)
|
|
assert len(tags) == 2
|
|
assert tags[0]['t_type'] == TAG_TYPE_NODE
|
|
assert tags[0]['id'] == 'j2'
|
|
assert tags[0]['tag'] == 'j2t'
|
|
assert tags[1]['t_type'] == TAG_TYPE_LINK
|
|
assert tags[1]['id'] == 'p0'
|
|
assert tags[1]['tag'] == 'p0t'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_tag_op(self):
|
|
p = 'test_tag_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
assert is_pipe(p, 'p0')
|
|
|
|
cs = set_tag(p, ChangeSet({'t_type': TAG_TYPE_NODE, 'id': 'j1', 'tag': 'j1t' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tag'
|
|
assert cs['t_type'] == TAG_TYPE_NODE
|
|
assert cs['id'] == 'j1'
|
|
assert cs['tag'] == 'j1t'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tag'
|
|
assert cs['t_type'] == TAG_TYPE_NODE
|
|
assert cs['id'] == 'j1'
|
|
assert cs['tag'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tag'
|
|
assert cs['t_type'] == TAG_TYPE_NODE
|
|
assert cs['id'] == 'j1'
|
|
assert cs['tag'] == 'j1t'
|
|
|
|
cs = set_tag(p, ChangeSet({'t_type': TAG_TYPE_LINK, 'id': 'p0', 'tag': 'p0t' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tag'
|
|
assert cs['t_type'] == TAG_TYPE_LINK
|
|
assert cs['id'] == 'p0'
|
|
assert cs['tag'] == 'p0t'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tag'
|
|
assert cs['t_type'] == TAG_TYPE_LINK
|
|
assert cs['id'] == 'p0'
|
|
assert cs['tag'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tag'
|
|
assert cs['t_type'] == TAG_TYPE_LINK
|
|
assert cs['id'] == 'p0'
|
|
assert cs['tag'] == 'p0t'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 9 demand
|
|
|
|
|
|
def test_demand(self):
|
|
p = 'test_demand'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
|
|
d = get_demand(p, 'j1')
|
|
assert d['junction'] == 'j1'
|
|
assert d['demands'] == []
|
|
|
|
set_demand(p, ChangeSet({'junction': 'j1', 'demands': [{'demand': 10.0, 'pattern': None, 'category': 'x'},
|
|
{'demand': 20.0, 'pattern': None, 'category': None}]}))
|
|
|
|
d = get_demand(p, 'j1')
|
|
assert d['junction'] == 'j1'
|
|
ds = d['demands']
|
|
assert len(ds) == 2
|
|
assert ds[0]['demand'] == 10.0
|
|
assert ds[0]['pattern'] == None
|
|
assert ds[0]['category'] == 'x'
|
|
assert ds[1]['demand'] == 20.0
|
|
assert ds[1]['pattern'] == None
|
|
assert ds[1]['category'] == None
|
|
|
|
set_demand(p, ChangeSet({'junction': 'j1', 'demands': []}))
|
|
|
|
d = get_demand(p, 'j1')
|
|
assert d['junction'] == 'j1'
|
|
assert d['demands'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_demand_op(self):
|
|
p = 'test_demand_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
|
|
result = set_demand(p, ChangeSet({'junction': 'j1', 'demands': [{'demand': 10.0, 'pattern': None, 'category': 'x'},
|
|
{'demand': 20.0, 'pattern': None, 'category': None}]}))
|
|
cs = result.operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'demand'
|
|
assert cs['junction'] == 'j1'
|
|
ds = cs['demands']
|
|
assert len(ds) == 2
|
|
assert ds[0]['demand'] == 10.0
|
|
assert ds[0]['pattern'] == None
|
|
assert ds[0]['category'] == 'x'
|
|
assert ds[1]['demand'] == 20.0
|
|
assert ds[1]['pattern'] == None
|
|
assert ds[1]['category'] == None
|
|
|
|
result = execute_undo(p)
|
|
cs = result.operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'demand'
|
|
assert cs['junction'] == 'j1'
|
|
assert len(cs['demands']) == 0
|
|
|
|
result = execute_redo(p)
|
|
cs = result.operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'demand'
|
|
assert cs['junction'] == 'j1'
|
|
ds = cs['demands']
|
|
assert len(ds) == 2
|
|
assert ds[0]['demand'] == 10.0
|
|
assert ds[0]['pattern'] == None
|
|
assert ds[0]['category'] == 'x'
|
|
assert ds[1]['demand'] == 20.0
|
|
assert ds[1]['pattern'] == None
|
|
assert ds[1]['category'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 10 status
|
|
|
|
|
|
def test_status(self):
|
|
p = 'test_status'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
assert is_pipe(p, 'p0')
|
|
|
|
s = get_status(p, 'p0')
|
|
assert s['link'] == 'p0'
|
|
assert s['status'] == None
|
|
assert s['setting'] == None
|
|
|
|
set_status(p, ChangeSet({'link': 'p0', 'status': LINK_STATUS_OPEN, 'setting': 10.0}))
|
|
s = get_status(p, 'p0')
|
|
assert s['link'] == 'p0'
|
|
assert s['status'] == LINK_STATUS_OPEN
|
|
assert s['setting'] == 10.0
|
|
|
|
set_status(p, ChangeSet({'link': 'p0', 'status': None, 'setting': None}))
|
|
s = get_status(p, 'p0')
|
|
assert s['link'] == 'p0'
|
|
assert s['status'] == None
|
|
assert s['setting'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_status_op(self):
|
|
p = 'test_status_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
assert is_junction(p, 'j2')
|
|
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
assert is_pipe(p, 'p0')
|
|
|
|
s = get_status(p, 'p0')
|
|
assert s['link'] == 'p0'
|
|
assert s['status'] == None
|
|
assert s['setting'] == None
|
|
|
|
cs = set_status(p, ChangeSet({'link': 'p0', 'status': LINK_STATUS_OPEN, 'setting': 10.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'status'
|
|
assert cs['link'] == 'p0'
|
|
assert cs['status'] == LINK_STATUS_OPEN
|
|
assert cs['setting'] == 10.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'status'
|
|
assert cs['link'] == 'p0'
|
|
assert cs['status'] == None
|
|
assert cs['setting'] == None
|
|
|
|
s = get_status(p, 'p0')
|
|
assert s['link'] == 'p0'
|
|
assert s['status'] == None
|
|
assert s['setting'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'status'
|
|
assert cs['link'] == 'p0'
|
|
assert cs['status'] == LINK_STATUS_OPEN
|
|
assert cs['setting'] == 10.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 11 pattern
|
|
|
|
|
|
def test_pattern(self):
|
|
p = 'test_pattern'
|
|
self.enter(p)
|
|
|
|
assert is_pattern(p, 'p0') == False
|
|
|
|
assert get_pattern(p, 'p0') == {}
|
|
|
|
add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]}))
|
|
|
|
assert is_pattern(p, 'p0')
|
|
p0 = get_pattern(p, 'p0')
|
|
assert p0['id'] == 'p0'
|
|
assert p0['factors'] == [1.0, 2.0, 3.0]
|
|
|
|
set_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0]}))
|
|
|
|
assert is_pattern(p, 'p0')
|
|
p0 = get_pattern(p, 'p0')
|
|
assert p0['id'] == 'p0'
|
|
assert p0['factors'] == [1.0, 2.0]
|
|
|
|
set_pattern(p, ChangeSet({'id' : 'p0', 'factors': []}))
|
|
|
|
assert is_pattern(p, 'p0')
|
|
p0 = get_pattern(p, 'p0')
|
|
assert p0['id'] == 'p0'
|
|
assert p0['factors'] == []
|
|
|
|
delete_pattern(p, ChangeSet({'id' : 'p0'}))
|
|
assert is_pattern(p, 'p0') == False
|
|
|
|
assert get_pattern(p, 'p0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pattern_op(self):
|
|
p = 'test_pattern_op'
|
|
self.enter(p)
|
|
|
|
cs = add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == [1.0, 2.0, 3.0]
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == [1.0, 2.0, 3.0]
|
|
|
|
cs = set_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0]})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == [1.0, 2.0]
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == [1.0, 2.0, 3.0]
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == [1.0, 2.0]
|
|
|
|
cs = set_pattern(p, ChangeSet({'id' : 'p0', 'factors': []})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == []
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == [1.0, 2.0]
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == []
|
|
|
|
cs = delete_pattern(p, ChangeSet({'id' : 'p0'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
assert cs['factors'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == PATTERN
|
|
assert cs['id'] == 'p0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pattern_del(self):
|
|
p = 'test_pattern_del'
|
|
self.enter(p)
|
|
|
|
add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]}))
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_reservoir(p, ChangeSet({'id': 'r0', 'x': 0.0, 'y': 10.0, 'head': 20.0, 'pattern': 'p0'}))
|
|
add_pump(p, ChangeSet({'id': 'pump0', 'node1': 'j0', 'node2': 'r0', 'power': 0.0, 'pattern': 'p0'}))
|
|
set_demand(p, ChangeSet({'junction': 'j0', 'demands': [{'demand': 10.0, 'pattern': 'p0', 'category': 'x'}, {'demand': 20.0, 'pattern': 'p0', 'category': None}]}))
|
|
set_pump_energy(p, ChangeSet({'pump' : 'pump0', 'pattern': 'p0'}))
|
|
add_source(p, ChangeSet({'node': 'j0', 's_type': SOURCE_TYPE_CONCEN, 'strength': 10.0, 'pattern': 'p0' }))
|
|
assert is_pattern(p, 'p0')
|
|
assert get_reservoir(p, 'r0')['pattern'] == 'p0'
|
|
assert get_pump(p, 'pump0')['pattern'] == 'p0'
|
|
assert get_demand(p, 'j0')['demands'] == [{'demand': 10.0, 'pattern': 'p0', 'category': 'x'}, {'demand': 20.0, 'pattern': 'p0', 'category': None}]
|
|
assert get_pump_energy(p, 'pump0')['pattern'] == 'p0'
|
|
assert get_source(p, 'j0')['pattern'] == 'p0'
|
|
|
|
delete_pattern(p, ChangeSet({'id': 'p0'}))
|
|
assert is_pattern(p, 'p0') == False
|
|
assert get_reservoir(p, 'r0')['pattern'] == None
|
|
assert get_pump(p, 'pump0')['pattern'] == None
|
|
assert get_demand(p, 'j0')['demands'] == [{'demand': 10.0, 'pattern': None, 'category': 'x'}, {'demand': 20.0, 'pattern': None, 'category': None}]
|
|
assert get_pump_energy(p, 'pump0')['pattern'] == None
|
|
assert get_source(p, 'j0')['pattern'] == None
|
|
|
|
execute_undo(p)
|
|
assert is_pattern(p, 'p0')
|
|
assert get_reservoir(p, 'r0')['pattern'] == 'p0'
|
|
assert get_pump(p, 'pump0')['pattern'] == 'p0'
|
|
assert get_demand(p, 'j0')['demands'] == [{'demand': 10.0, 'pattern': 'p0', 'category': 'x'}, {'demand': 20.0, 'pattern': 'p0', 'category': None}]
|
|
assert get_pump_energy(p, 'pump0')['pattern'] == 'p0'
|
|
assert get_source(p, 'j0')['pattern'] == 'p0'
|
|
|
|
execute_redo(p)
|
|
assert is_pattern(p, 'p0') == False
|
|
assert get_reservoir(p, 'r0')['pattern'] == None
|
|
assert get_pump(p, 'pump0')['pattern'] == None
|
|
assert get_demand(p, 'j0')['demands'] == [{'demand': 10.0, 'pattern': None, 'category': 'x'}, {'demand': 20.0, 'pattern': None, 'category': None}]
|
|
assert get_pump_energy(p, 'pump0')['pattern'] == None
|
|
assert get_source(p, 'j0')['pattern'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 12 curve
|
|
|
|
|
|
def test_curve(self):
|
|
p = 'test_curve'
|
|
self.enter(p)
|
|
|
|
assert is_curve(p, 'c0') == False
|
|
|
|
assert get_curve(p, 'c0') == {}
|
|
|
|
add_curve(p, ChangeSet({'id' : 'c0', 'c_type' : CURVE_TYPE_PUMP, 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
|
|
assert is_curve(p, 'c0')
|
|
c0 = get_curve(p, 'c0')
|
|
assert c0['id'] == 'c0'
|
|
assert c0['c_type'] == CURVE_TYPE_PUMP
|
|
xys = c0['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
set_curve(p, ChangeSet({'id' : 'c0', 'c_type': CURVE_TYPE_EFFICIENCY}))
|
|
|
|
c0 = get_curve(p, 'c0')
|
|
assert c0['id'] == 'c0'
|
|
assert c0['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
xys = c0['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
set_curve(p, ChangeSet({'id' : 'c0', 'coords': []}))
|
|
|
|
c0 = get_curve(p, 'c0')
|
|
assert c0['id'] == 'c0'
|
|
assert c0['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
assert c0['coords'] == []
|
|
|
|
delete_curve(p, ChangeSet({'id' : 'c0'}))
|
|
|
|
assert is_curve(p, 'c0') == False
|
|
|
|
assert get_curve(p, 'c0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_curve_op(self):
|
|
p = 'test_curve_op'
|
|
self.enter(p)
|
|
|
|
cs = add_curve(p, ChangeSet({'id' : 'c0', 'c_type' : CURVE_TYPE_PUMP, 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_PUMP
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_PUMP
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = set_curve(p, ChangeSet({'id' : 'c0', 'c_type': CURVE_TYPE_EFFICIENCY})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_PUMP
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = set_curve(p, ChangeSet({'id' : 'c0', 'coords': []})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
assert cs['coords'] == []
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == CURVE
|
|
assert cs['id'] == 'c0'
|
|
assert cs['c_type'] == CURVE_TYPE_EFFICIENCY
|
|
assert cs['coords'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_curve_del(self):
|
|
p = 'test_curve_del'
|
|
self.enter(p)
|
|
|
|
add_curve(p, ChangeSet({'id' : 'c0', 'c_type' : CURVE_TYPE_PUMP, 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': 'c0', 'overflow': OVERFLOW_NO}))
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'pattern': None}))
|
|
add_reservoir(p, ChangeSet({'id': 'r0', 'x': 0.0, 'y': 10.0, 'head': 20.0, 'pattern': None}))
|
|
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j0', 'node2': 'r0', 'head': 'c0'}))
|
|
set_pump_energy(p, ChangeSet({'pump' : 'p0', 'effic': 'c0'}))
|
|
assert is_curve(p, 'c0')
|
|
assert get_tank(p, 't0')['vol_curve'] == 'c0'
|
|
assert get_pump(p, 'p0')['head'] == 'c0'
|
|
assert get_pump_energy(p, 'p0')['effic'] == 'c0'
|
|
|
|
delete_curve(p, ChangeSet({'id': 'c0'}))
|
|
assert is_curve(p, 'c0') == False
|
|
assert get_tank(p, 't0')['vol_curve'] == None
|
|
assert get_pump(p, 'p0')['head'] == None
|
|
assert get_pump_energy(p, 'p0')['effic'] == None
|
|
|
|
execute_undo(p)
|
|
assert is_curve(p, 'c0')
|
|
assert get_tank(p, 't0')['vol_curve'] == 'c0'
|
|
assert get_pump(p, 'p0')['head'] == 'c0'
|
|
assert get_pump_energy(p, 'p0')['effic'] == 'c0'
|
|
|
|
execute_redo(p)
|
|
assert is_curve(p, 'c0') == False
|
|
assert get_tank(p, 't0')['vol_curve'] == None
|
|
assert get_pump(p, 'p0')['head'] == None
|
|
assert get_pump_energy(p, 'p0')['effic'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 13 control
|
|
|
|
|
|
def test_control(self):
|
|
p = 'test_control'
|
|
self.enter(p)
|
|
|
|
assert get_control(p)['controls'] == []
|
|
|
|
set_control(p, ChangeSet({'controls': ['x']}))
|
|
assert get_control(p)['controls'] == ['x']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_control_op(self):
|
|
p = 'test_control_op'
|
|
self.enter(p)
|
|
|
|
cs = set_control(p, ChangeSet({'controls': ['x']})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'control'
|
|
assert cs['controls'] == ['x']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'control'
|
|
assert cs['controls'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'control'
|
|
assert cs['controls'] == ['x']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 14 rule
|
|
|
|
|
|
def test_rule(self):
|
|
p = 'test_rule'
|
|
self.enter(p)
|
|
|
|
assert get_rule(p)['rules'] == []
|
|
|
|
set_rule(p, ChangeSet({'rules': ['x']}))
|
|
assert get_rule(p)['rules'] == ['x']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_rule_op(self):
|
|
p = 'test_rule_op'
|
|
self.enter(p)
|
|
|
|
cs = set_rule(p, ChangeSet({'rules': ['x']})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'rule'
|
|
assert cs['rules'] == ['x']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'rule'
|
|
assert cs['rules'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'rule'
|
|
assert cs['rules'] == ['x']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 15 energy
|
|
|
|
|
|
def test_energy(self):
|
|
p = 'test_energy'
|
|
self.enter(p)
|
|
|
|
ge = get_energy(p)
|
|
assert ge['GLOBAL PRICE'] == '0'
|
|
assert ge['GLOBAL PATTERN'] == ''
|
|
assert ge['GLOBAL EFFIC'] == '75'
|
|
assert ge['DEMAND CHARGE'] == '0'
|
|
|
|
set_energy(p, ChangeSet({ 'GLOBAL PRICE' : '10' }))
|
|
ge = get_energy(p)
|
|
assert ge['GLOBAL PRICE'] == '10'
|
|
assert ge['GLOBAL PATTERN'] == ''
|
|
assert ge['GLOBAL EFFIC'] == '75'
|
|
assert ge['DEMAND CHARGE'] == '0'
|
|
|
|
add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]}))
|
|
set_energy(p, ChangeSet({ 'GLOBAL PATTERN' : 'p0' }))
|
|
ge = get_energy(p)
|
|
assert ge['GLOBAL PRICE'] == '10'
|
|
assert ge['GLOBAL PATTERN'] == 'p0'
|
|
assert ge['GLOBAL EFFIC'] == '75'
|
|
assert ge['DEMAND CHARGE'] == '0'
|
|
|
|
set_energy(p, ChangeSet({ 'GLOBAL EFFIC' : '0' }))
|
|
ge = get_energy(p)
|
|
assert ge['GLOBAL PRICE'] == '10'
|
|
assert ge['GLOBAL PATTERN'] == 'p0'
|
|
assert ge['GLOBAL EFFIC'] == '0'
|
|
assert ge['DEMAND CHARGE'] == '0'
|
|
|
|
set_energy(p, ChangeSet({ 'DEMAND CHARGE' : '10' }))
|
|
ge = get_energy(p)
|
|
assert ge['GLOBAL PRICE'] == '10'
|
|
assert ge['GLOBAL PATTERN'] == 'p0'
|
|
assert ge['GLOBAL EFFIC'] == '0'
|
|
assert ge['DEMAND CHARGE'] == '10'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_energy_op(self):
|
|
p = 'test_energy_op'
|
|
self.enter(p)
|
|
|
|
add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]}))
|
|
|
|
cs = set_energy(p, ChangeSet({ 'GLOBAL PRICE' : '10' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL PRICE'] == '10'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL PRICE'] == '0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL PRICE'] == '10'
|
|
|
|
cs = set_energy(p, ChangeSet({ 'GLOBAL PATTERN' : 'p0' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL PATTERN'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL PATTERN'] == ''
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL PATTERN'] == 'p0'
|
|
|
|
cs = set_energy(p, ChangeSet({ 'GLOBAL EFFIC' : '0' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL EFFIC'] == '0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL EFFIC'] == '75'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['GLOBAL EFFIC'] == '0'
|
|
|
|
cs = set_energy(p, ChangeSet({ 'DEMAND CHARGE' : '10' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['DEMAND CHARGE'] == '10'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['DEMAND CHARGE'] == '0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'energy'
|
|
assert cs['DEMAND CHARGE'] == '10'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pump_energy(self):
|
|
p = 'test_pump_energy'
|
|
self.enter(p)
|
|
|
|
ge = get_pump_energy(p, 'p0')
|
|
assert ge['pump'] == 'p0'
|
|
assert ge['price'] == None
|
|
assert ge['pattern'] == None
|
|
assert ge['effic'] == None
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
|
|
|
set_pump_energy(p, ChangeSet({'pump' : 'p0'}))
|
|
ge = get_pump_energy(p, 'p0')
|
|
assert ge['pump'] == 'p0'
|
|
assert ge['price'] == None
|
|
assert ge['pattern'] == None
|
|
assert ge['effic'] == None
|
|
|
|
set_pump_energy(p, ChangeSet({'pump' : 'p0', 'price': 0.0}))
|
|
ge = get_pump_energy(p, 'p0')
|
|
assert ge['pump'] == 'p0'
|
|
assert ge['price'] == 0.0
|
|
assert ge['pattern'] == None
|
|
assert ge['effic'] == None
|
|
|
|
add_pattern(p, ChangeSet({'id' : 'pa0', 'factors': [1.0, 2.0, 3.0]}))
|
|
set_pump_energy(p, ChangeSet({'pump' : 'p0', 'pattern': 'pa0'}))
|
|
ge = get_pump_energy(p, 'p0')
|
|
assert ge['pump'] == 'p0'
|
|
assert ge['price'] == 0.0
|
|
assert ge['pattern'] == 'pa0'
|
|
assert ge['effic'] == None
|
|
|
|
add_curve(p, ChangeSet({'id' : 'c0', 'c_type' : CURVE_TYPE_PUMP, 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
set_pump_energy(p, ChangeSet({'pump' : 'p0', 'effic': 'c0'}))
|
|
ge = get_pump_energy(p, 'p0')
|
|
assert ge['pump'] == 'p0'
|
|
assert ge['price'] == 0.0
|
|
assert ge['pattern'] == 'pa0'
|
|
assert ge['effic'] == 'c0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pump_energy_op(self):
|
|
p = 'test_pump_energy_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
|
add_pattern(p, ChangeSet({'id' : 'pa0', 'factors': [1.0, 2.0, 3.0]}))
|
|
add_curve(p, ChangeSet({'id' : 'c0', 'c_type' : CURVE_TYPE_PUMP, 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
|
|
cs = set_pump_energy(p, ChangeSet({'pump' : 'p0'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = set_pump_energy(p, ChangeSet({'pump' : 'p0', 'price': 0.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = set_pump_energy(p, ChangeSet({'pump' : 'p0', 'pattern': 'pa0'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == None
|
|
|
|
cs = set_pump_energy(p, ChangeSet({'pump' : 'p0', 'effic': 'c0'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == 'c0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == 'c0'
|
|
|
|
cs = set_pump_energy(p, ChangeSet({'pump' : 'p0', 'price': None, 'pattern': None, 'effic': None})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == 'c0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = set_pump_energy(p, ChangeSet({'pump' : 'p0', 'price': 0.0, 'pattern': 'pa0', 'effic': 'c0'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == 'c0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == None
|
|
assert cs['pattern'] == None
|
|
assert cs['effic'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pump_energy'
|
|
assert cs['pump'] == 'p0'
|
|
assert cs['price'] == 0.0
|
|
assert cs['pattern'] == 'pa0'
|
|
assert cs['effic'] == 'c0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 16 emitter
|
|
|
|
|
|
def test_emitter(self):
|
|
p = 'test_emitter'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
|
|
e = get_emitter(p, 'j1')
|
|
assert e['junction'] == 'j1'
|
|
assert e['coefficient'] == None
|
|
|
|
set_emitter(p, ChangeSet({'junction': 'j1', 'coefficient': 10.0}))
|
|
|
|
e = get_emitter(p, 'j1')
|
|
assert e['junction'] == 'j1'
|
|
assert e['coefficient'] == 10.0
|
|
|
|
set_emitter(p, ChangeSet({'junction': 'j1', 'coefficient': None}))
|
|
|
|
e = get_emitter(p, 'j1')
|
|
assert e['junction'] == 'j1'
|
|
assert e['coefficient'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_emitter_op(self):
|
|
p = 'test_emitter_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
|
|
cs = set_emitter(p, ChangeSet({'junction': 'j1', 'coefficient': 10.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'emitter'
|
|
assert cs['junction'] == 'j1'
|
|
assert cs['coefficient'] == 10.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'emitter'
|
|
assert cs['junction'] == 'j1'
|
|
assert cs['coefficient'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'emitter'
|
|
assert cs['junction'] == 'j1'
|
|
assert cs['coefficient'] == 10.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 17 quality
|
|
|
|
|
|
def test_quality(self):
|
|
p = 'test_quality'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
|
|
e = get_quality(p, 'j1')
|
|
assert e['node'] == 'j1'
|
|
assert e['quality'] == None
|
|
|
|
set_quality(p, ChangeSet({'node': 'j1', 'quality': 10.0}))
|
|
|
|
e = get_quality(p, 'j1')
|
|
assert e['node'] == 'j1'
|
|
assert e['quality'] == 10.0
|
|
|
|
set_quality(p, ChangeSet({'node': 'j1', 'quality': None}))
|
|
|
|
e = get_quality(p, 'j1')
|
|
assert e['node'] == 'j1'
|
|
assert e['quality'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_quality_op(self):
|
|
p = 'test_quality_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
assert is_junction(p, 'j1')
|
|
|
|
cs = set_quality(p, ChangeSet({'node': 'j1', 'quality': 10.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'quality'
|
|
assert cs['node'] == 'j1'
|
|
assert cs['quality'] == 10.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'quality'
|
|
assert cs['node'] == 'j1'
|
|
assert cs['quality'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'quality'
|
|
assert cs['node'] == 'j1'
|
|
assert cs['quality'] == 10.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 18 source
|
|
|
|
|
|
def test_source(self):
|
|
p = 'test_source'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]}))
|
|
add_pattern(p, ChangeSet({'id' : 'p1', 'factors': [1.0, 2.0, 3.0]}))
|
|
|
|
assert get_source(p, 'j0') == {}
|
|
|
|
add_source(p, ChangeSet({'node': 'j0', 's_type': SOURCE_TYPE_CONCEN, 'strength': 10.0, 'pattern': 'p0'}))
|
|
s = get_source(p, 'j0')
|
|
assert s['node'] == 'j0'
|
|
assert s['s_type'] == SOURCE_TYPE_CONCEN
|
|
assert s['strength'] == 10.0
|
|
assert s['pattern'] == 'p0'
|
|
|
|
set_source(p, ChangeSet({'node': 'j0', 's_type': SOURCE_TYPE_FLOWPACED}))
|
|
s = get_source(p, 'j0')
|
|
assert s['node'] == 'j0'
|
|
assert s['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert s['strength'] == 10.0
|
|
assert s['pattern'] == 'p0'
|
|
|
|
set_source(p, ChangeSet({'node': 'j0', 'strength': 20.0}))
|
|
s = get_source(p, 'j0')
|
|
assert s['node'] == 'j0'
|
|
assert s['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert s['strength'] == 20.0
|
|
assert s['pattern'] == 'p0'
|
|
|
|
set_source(p, ChangeSet({'node': 'j0', 'pattern': 'p1'}))
|
|
s = get_source(p, 'j0')
|
|
assert s['node'] == 'j0'
|
|
assert s['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert s['strength'] == 20.0
|
|
assert s['pattern'] == 'p1'
|
|
|
|
delete_source(p, ChangeSet({'node': 'j0'}))
|
|
|
|
assert get_source(p, 'j0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_source_op(self):
|
|
p = 'test_source_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pattern(p, ChangeSet({'id' : 'p0', 'factors': [1.0, 2.0, 3.0]}))
|
|
add_pattern(p, ChangeSet({'id' : 'p1', 'factors': [1.0, 2.0, 3.0]}))
|
|
|
|
cs = add_source(p, ChangeSet({'node': 'j0', 's_type': SOURCE_TYPE_CONCEN, 'strength': 10.0, 'pattern': 'p0'})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_CONCEN
|
|
assert cs['strength'] == 10.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_CONCEN
|
|
assert cs['strength'] == 10.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = set_source(p, ChangeSet({'node': 'j0', 's_type': SOURCE_TYPE_FLOWPACED})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 10.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_CONCEN
|
|
assert cs['strength'] == 10.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 10.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = set_source(p, ChangeSet({'node': 'j0', 'strength': 20.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 20.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 10.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 20.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = set_source(p, ChangeSet({'node': 'j0', 'pattern': 'p1'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 20.0
|
|
assert cs['pattern'] == 'p1'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 20.0
|
|
assert cs['pattern'] == 'p0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 20.0
|
|
assert cs['pattern'] == 'p1'
|
|
|
|
cs = delete_source(p, ChangeSet({'node': 'j0'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
assert cs['s_type'] == SOURCE_TYPE_FLOWPACED
|
|
assert cs['strength'] == 20.0
|
|
assert cs['pattern'] == 'p1'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'source'
|
|
assert cs['node'] == 'j0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 19 reaction
|
|
|
|
|
|
def test_reaction(self):
|
|
p = 'test_reaction'
|
|
self.enter(p)
|
|
|
|
gr = get_reaction(p)
|
|
assert gr['ORDER BULK'] == '1'
|
|
assert gr['ORDER WALL'] == '1'
|
|
assert gr['ORDER TANK'] == '1'
|
|
assert gr['GLOBAL BULK'] == '0'
|
|
assert gr['GLOBAL WALL'] == '0'
|
|
assert gr['LIMITING POTENTIAL'] == '0'
|
|
assert gr['ROUGHNESS CORRELATION'] == '0'
|
|
|
|
set_reaction(p, ChangeSet({ 'ORDER BULK' : '10' }))
|
|
gr = get_reaction(p)
|
|
assert gr['ORDER BULK'] == '10'
|
|
assert gr['ORDER WALL'] == '1'
|
|
assert gr['ORDER TANK'] == '1'
|
|
assert gr['GLOBAL BULK'] == '0'
|
|
assert gr['GLOBAL WALL'] == '0'
|
|
assert gr['LIMITING POTENTIAL'] == '0'
|
|
assert gr['ROUGHNESS CORRELATION'] == '0'
|
|
|
|
set_reaction(p, ChangeSet({ 'ORDER BULK' : '1' }))
|
|
gr = get_reaction(p)
|
|
assert gr['ORDER BULK'] == '1'
|
|
assert gr['ORDER WALL'] == '1'
|
|
assert gr['ORDER TANK'] == '1'
|
|
assert gr['GLOBAL BULK'] == '0'
|
|
assert gr['GLOBAL WALL'] == '0'
|
|
assert gr['LIMITING POTENTIAL'] == '0'
|
|
assert gr['ROUGHNESS CORRELATION'] == '0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_reaction_op(self):
|
|
p = 'test_reaction_op'
|
|
self.enter(p)
|
|
|
|
cs = set_reaction(p, ChangeSet({ 'ORDER BULK' : '10' })).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'reaction'
|
|
assert cs['ORDER BULK'] == '10'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'reaction'
|
|
assert cs['ORDER BULK'] == '1'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'reaction'
|
|
assert cs['ORDER BULK'] == '10'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pipe_reaction(self):
|
|
p = 'test_pipe_reaction'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
|
|
pp = get_pipe_reaction(p, 'p0')
|
|
assert pp['pipe'] == 'p0'
|
|
assert pp['bulk'] == None
|
|
assert pp['wall'] == None
|
|
|
|
set_pipe_reaction(p, ChangeSet({'pipe': 'p0', 'bulk': 10.0, 'wall': 20.0}))
|
|
pp = get_pipe_reaction(p, 'p0')
|
|
assert pp['pipe'] == 'p0'
|
|
assert pp['bulk'] == 10.0
|
|
assert pp['wall'] == 20.0
|
|
|
|
set_pipe_reaction(p, ChangeSet({'pipe': 'p0', 'bulk': None, 'wall': None}))
|
|
pp = get_pipe_reaction(p, 'p0')
|
|
assert pp['pipe'] == 'p0'
|
|
assert pp['bulk'] == None
|
|
assert pp['wall'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_pipe_reaction_op(self):
|
|
p = 'test_pipe_reaction_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
|
|
cs = set_pipe_reaction(p, ChangeSet({'pipe': 'p0', 'bulk': 10.0, 'wall': 20.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pipe_reaction'
|
|
assert cs['pipe'] == 'p0'
|
|
assert cs['bulk'] == 10.0
|
|
assert cs['wall'] == 20.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pipe_reaction'
|
|
assert cs['pipe'] == 'p0'
|
|
assert cs['bulk'] == None
|
|
assert cs['wall'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'pipe_reaction'
|
|
assert cs['pipe'] == 'p0'
|
|
assert cs['bulk'] == 10.0
|
|
assert cs['wall'] == 20.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_tank_reaction(self):
|
|
p = 'test_tank_reaction'
|
|
self.enter(p)
|
|
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
|
|
pt = get_tank_reaction(p, 't0')
|
|
assert pt['tank'] == 't0'
|
|
assert pt['value'] == None
|
|
|
|
set_tank_reaction(p, ChangeSet({'tank': 't0', 'value': 10.0}))
|
|
pt = get_tank_reaction(p, 't0')
|
|
assert pt['tank'] == 't0'
|
|
assert pt['value'] == 10.0
|
|
|
|
set_tank_reaction(p, ChangeSet({'tank': 't0', 'value': None}))
|
|
pt = get_tank_reaction(p, 't0')
|
|
assert pt['tank'] == 't0'
|
|
assert pt['value'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_tank_reaction_op(self):
|
|
p = 'test_tank_reaction_op'
|
|
self.enter(p)
|
|
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
|
|
cs = set_tank_reaction(p, ChangeSet({'tank': 't0', 'value': 10.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tank_reaction'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tank_reaction'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['value'] == None
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'tank_reaction'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['value'] == 10.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 20 mixing
|
|
|
|
|
|
def test_mixing(self):
|
|
p = 'test_mixing'
|
|
self.enter(p)
|
|
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
|
|
assert get_mixing(p, 't0') == {}
|
|
|
|
add_mixing(p, ChangeSet({'tank': 't0', 'model': MIXING_MODEL_MIXED, 'value': 10.0}))
|
|
m = get_mixing(p,'t0')
|
|
assert m['tank'] == 't0'
|
|
assert m['model'] == MIXING_MODEL_MIXED
|
|
assert m['value'] == 10.0
|
|
|
|
set_mixing(p, ChangeSet({'tank': 't0', 'model': MIXING_MODEL_2COMP}))
|
|
m = get_mixing(p,'t0')
|
|
assert m['tank'] == 't0'
|
|
assert m['model'] == MIXING_MODEL_2COMP
|
|
assert m['value'] == 10.0
|
|
|
|
set_mixing(p, ChangeSet({'tank': 't0', 'value': 20.0}))
|
|
m = get_mixing(p,'t0')
|
|
assert m['tank'] == 't0'
|
|
assert m['model'] == MIXING_MODEL_2COMP
|
|
assert m['value'] == 20.0
|
|
|
|
delete_mixing(p, ChangeSet({'tank': 't0'}))
|
|
|
|
assert get_mixing(p, 't0') == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_mixing_op(self):
|
|
p = 'test_mixing_op'
|
|
self.enter(p)
|
|
|
|
add_tank(p, ChangeSet({'id': 't0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
|
|
|
cs = add_mixing(p, ChangeSet({'tank': 't0', 'model': MIXING_MODEL_MIXED, 'value': 10.0})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_MIXED
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_MIXED
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = set_mixing(p, ChangeSet({'tank': 't0', 'model': MIXING_MODEL_2COMP})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_2COMP
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_MIXED
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_2COMP
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = set_mixing(p, ChangeSet({'tank': 't0', 'value': 20.0})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_2COMP
|
|
assert cs['value'] == 20.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_2COMP
|
|
assert cs['value'] == 10.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_2COMP
|
|
assert cs['value'] == 20.0
|
|
|
|
cs = delete_mixing(p, ChangeSet({'tank': 't0'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
assert cs['model'] == MIXING_MODEL_2COMP
|
|
assert cs['value'] == 20.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'mixing'
|
|
assert cs['tank'] == 't0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 21 time
|
|
|
|
|
|
def test_time(self):
|
|
p = 'test_time'
|
|
self.enter(p)
|
|
|
|
t = get_time(p)
|
|
assert t['DURATION'] == '0:00'
|
|
assert t['HYDRAULIC TIMESTEP'] == '1:00'
|
|
assert t['QUALITY TIMESTEP'] == '0:05'
|
|
assert t['RULE TIMESTEP'] == '0:05'
|
|
assert t['PATTERN TIMESTEP'] == '1:00'
|
|
assert t['PATTERN START'] == '0:00'
|
|
assert t['REPORT TIMESTEP'] == '1:00'
|
|
assert t['REPORT START'] == '0:00'
|
|
assert t['START CLOCKTIME'] == '12:00 AM'
|
|
assert t['STATISTIC'] == TIME_STATISTIC_NONE
|
|
|
|
t['STATISTIC'] = TIME_STATISTIC_AVERAGED
|
|
set_time(p, ChangeSet(t))
|
|
|
|
t = get_time(p)
|
|
assert t['DURATION'] == '0:00'
|
|
assert t['HYDRAULIC TIMESTEP'] == '1:00'
|
|
assert t['QUALITY TIMESTEP'] == '0:05'
|
|
assert t['RULE TIMESTEP'] == '0:05'
|
|
assert t['PATTERN TIMESTEP'] == '1:00'
|
|
assert t['PATTERN START'] == '0:00'
|
|
assert t['REPORT TIMESTEP'] == '1:00'
|
|
assert t['REPORT START'] == '0:00'
|
|
assert t['START CLOCKTIME'] == '12:00 AM'
|
|
assert t['STATISTIC'] == TIME_STATISTIC_AVERAGED
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_time_op(self):
|
|
p = 'test_time_op'
|
|
self.enter(p)
|
|
|
|
t = get_time(p)
|
|
assert t['DURATION'] == '0:00'
|
|
assert t['HYDRAULIC TIMESTEP'] == '1:00'
|
|
assert t['QUALITY TIMESTEP'] == '0:05'
|
|
assert t['RULE TIMESTEP'] == '0:05'
|
|
assert t['PATTERN TIMESTEP'] == '1:00'
|
|
assert t['PATTERN START'] == '0:00'
|
|
assert t['REPORT TIMESTEP'] == '1:00'
|
|
assert t['REPORT START'] == '0:00'
|
|
assert t['START CLOCKTIME'] == '12:00 AM'
|
|
assert t['STATISTIC'] == TIME_STATISTIC_NONE
|
|
|
|
t['STATISTIC'] = TIME_STATISTIC_AVERAGED
|
|
cs = set_time(p, ChangeSet(t)).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'time'
|
|
assert cs['DURATION'] == '0:00'
|
|
assert cs['HYDRAULIC TIMESTEP'] == '1:00'
|
|
assert cs['QUALITY TIMESTEP'] == '0:05'
|
|
assert cs['RULE TIMESTEP'] == '0:05'
|
|
assert cs['PATTERN TIMESTEP'] == '1:00'
|
|
assert cs['PATTERN START'] == '0:00'
|
|
assert cs['REPORT TIMESTEP'] == '1:00'
|
|
assert cs['REPORT START'] == '0:00'
|
|
assert cs['START CLOCKTIME'] == '12:00 AM'
|
|
assert cs['STATISTIC'] == TIME_STATISTIC_AVERAGED
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'time'
|
|
assert cs['DURATION'] == '0:00'
|
|
assert cs['HYDRAULIC TIMESTEP'] == '1:00'
|
|
assert cs['QUALITY TIMESTEP'] == '0:05'
|
|
assert cs['RULE TIMESTEP'] == '0:05'
|
|
assert cs['PATTERN TIMESTEP'] == '1:00'
|
|
assert cs['PATTERN START'] == '0:00'
|
|
assert cs['REPORT TIMESTEP'] == '1:00'
|
|
assert cs['REPORT START'] == '0:00'
|
|
assert cs['START CLOCKTIME'] == '12:00 AM'
|
|
assert cs['STATISTIC'] == TIME_STATISTIC_NONE
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'time'
|
|
assert cs['DURATION'] == '0:00'
|
|
assert cs['HYDRAULIC TIMESTEP'] == '1:00'
|
|
assert cs['QUALITY TIMESTEP'] == '0:05'
|
|
assert cs['RULE TIMESTEP'] == '0:05'
|
|
assert cs['PATTERN TIMESTEP'] == '1:00'
|
|
assert cs['PATTERN START'] == '0:00'
|
|
assert cs['REPORT TIMESTEP'] == '1:00'
|
|
assert cs['REPORT START'] == '0:00'
|
|
assert cs['START CLOCKTIME'] == '12:00 AM'
|
|
assert cs['STATISTIC'] == TIME_STATISTIC_AVERAGED
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 22 option
|
|
|
|
|
|
def test_option(self):
|
|
p = 'test_option'
|
|
self.enter(p)
|
|
|
|
o = get_option(p)
|
|
assert o['UNITS'] == OPTION_UNITS_LPS
|
|
assert o['PRESSURE'] == OPTION_PRESSURE_METERS
|
|
assert o['HEADLOSS'] == OPTION_HEADLOSS_HW
|
|
assert o['QUALITY'] == OPTION_QUALITY_NONE
|
|
assert o['UNBALANCED'] == OPTION_UNBALANCED_STOP
|
|
assert o['PATTERN'] == '1'
|
|
assert o['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
assert o['DEMAND MULTIPLIER'] == '1.0'
|
|
assert o['EMITTER EXPONENT'] == '0.5'
|
|
assert o['VISCOSITY'] == '1.0'
|
|
assert o['DIFFUSIVITY'] == '1.0'
|
|
assert o['SPECIFIC GRAVITY'] == '1.0'
|
|
assert o['TRIALS'] == '40'
|
|
assert o['ACCURACY'] == '0.001'
|
|
assert o['HEADERROR'] == '0.0001'
|
|
assert o['FLOWCHANGE'] == '0.0001'
|
|
assert o['MINIMUM PRESSURE'] == '0.0001'
|
|
assert o['REQUIRED PRESSURE'] == '20.0'
|
|
assert o['PRESSURE EXPONENT'] == '0.5'
|
|
assert o['TOLERANCE'] == '0.01'
|
|
assert o['HTOL'] == '0.0005'
|
|
assert o['QTOL'] == '0.0001'
|
|
assert o['RQTOL'] == '0.0000001'
|
|
assert o['CHECKFREQ'] == '2'
|
|
assert o['MAXCHECK'] == '10'
|
|
assert o['DAMPLIMIT'] == '0'
|
|
|
|
o3 = get_option_v3(p)
|
|
assert o3['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_LPS
|
|
assert o3['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_METERS
|
|
assert o3['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_HW
|
|
assert o3['SPECIFIC_GRAVITY'] == '1.0'
|
|
assert o3['SPECIFIC_VISCOSITY'] == '1.0'
|
|
assert o3['MAXIMUM_TRIALS'] == '40'
|
|
assert o3['HEAD_TOLERANCE'] == '0.0005'
|
|
assert o3['FLOW_TOLERANCE'] == '0.0001'
|
|
assert o3['FLOW_CHANGE_LIMIT'] == '0.0001'
|
|
assert o3['RELATIVE_ACCURACY'] == '0.001'
|
|
assert o3['TIME_WEIGHT'] == '0.0'
|
|
assert o3['STEP_SIZING'] == OPTION_V3_STEP_SIZING_FULL
|
|
assert o3['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_STOP
|
|
assert o3['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
assert o3['DEMAND_PATTERN'] == '1'
|
|
assert o3['DEMAND_MULTIPLIER'] == '1.0'
|
|
assert o3['MINIMUM_PRESSURE'] == '0.0001'
|
|
assert o3['SERVICE_PRESSURE'] == '20.0'
|
|
assert o3['PRESSURE_EXPONENT'] == '0.5'
|
|
assert o3['LEAKAGE_MODEL'] == OPTION_V3_LEAKAGE_MODEL_NONE
|
|
assert o3['LEAKAGE_COEFF1'] == '0.0'
|
|
assert o3['LEAKAGE_COEFF2'] == '0.0'
|
|
assert o3['EMITTER_EXPONENT'] == '0.5'
|
|
assert o3['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_NONE
|
|
assert o3['QUALITY_NAME'] == OPTION_V3_QUALITY_MODEL_CHEMICAL
|
|
assert o3['QUALITY_UNITS'] == OPTION_V3_QUALITY_UNITS_MGL
|
|
assert o3['TRACE_NODE'] == ''
|
|
assert o3['SPECIFIC_DIFFUSIVITY'] == '1.0'
|
|
assert o3['QUALITY_TOLERANCE'] == '0.01'
|
|
|
|
o['UNITS'] = OPTION_UNITS_LPS
|
|
o['PRESSURE'] = OPTION_PRESSURE_KPA
|
|
o['HEADLOSS'] = OPTION_HEADLOSS_DW
|
|
o['QUALITY'] = f'{OPTION_QUALITY_TRACE} 1'
|
|
o['UNBALANCED'] = OPTION_UNBALANCED_CONTINUE
|
|
o['PATTERN'] = '2'
|
|
o['DEMAND MODEL'] = OPTION_DEMAND_MODEL_PDA
|
|
o['DEMAND MULTIPLIER'] = '2.0'
|
|
o['EMITTER EXPONENT'] = '1.5'
|
|
o['VISCOSITY'] = '2.0'
|
|
o['DIFFUSIVITY'] = '2.0'
|
|
o['SPECIFIC GRAVITY'] = '2.0'
|
|
o['TRIALS'] = '50'
|
|
o['ACCURACY'] = '0.0001'
|
|
o['HEADERROR'] = '0.01'
|
|
o['FLOWCHANGE'] = '0.01'
|
|
o['MINIMUM PRESSURE'] = '0.01'
|
|
o['REQUIRED PRESSURE'] = '0.01'
|
|
o['PRESSURE EXPONENT'] = '0.05'
|
|
o['TOLERANCE'] = '0.001'
|
|
o['HTOL'] = '0.005'
|
|
o['QTOL'] = '0.001'
|
|
o['RQTOL'] = '0.000001'
|
|
o['CHECKFREQ'] = '1'
|
|
o['MAXCHECK'] = '15'
|
|
o['DAMPLIMIT'] = '1'
|
|
|
|
set_option(p, ChangeSet(o))
|
|
|
|
o = get_option(p)
|
|
assert o['UNITS'] == OPTION_UNITS_LPS
|
|
assert o['PRESSURE'] == OPTION_PRESSURE_KPA
|
|
assert o['HEADLOSS'] == OPTION_HEADLOSS_DW
|
|
assert o['QUALITY'] == f'{OPTION_QUALITY_TRACE} 1'
|
|
assert o['UNBALANCED'] == OPTION_UNBALANCED_CONTINUE
|
|
assert o['PATTERN'] == '2'
|
|
assert o['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
assert o['DEMAND MULTIPLIER'] == '2.0'
|
|
assert o['EMITTER EXPONENT'] == '1.5'
|
|
assert o['VISCOSITY'] == '2.0'
|
|
assert o['DIFFUSIVITY'] == '2.0'
|
|
assert o['SPECIFIC GRAVITY'] == '2.0'
|
|
assert o['TRIALS'] == '50'
|
|
assert o['ACCURACY'] == '0.0001'
|
|
assert o['HEADERROR'] == '0.01'
|
|
assert o['FLOWCHANGE'] == '0.01'
|
|
assert o['MINIMUM PRESSURE'] == '0.01'
|
|
assert o['REQUIRED PRESSURE'] == '0.01'
|
|
assert o['PRESSURE EXPONENT'] == '0.05'
|
|
assert o['TOLERANCE'] == '0.001'
|
|
assert o['HTOL'] == '0.005'
|
|
assert o['QTOL'] == '0.001'
|
|
assert o['RQTOL'] == '0.000001'
|
|
assert o['CHECKFREQ'] == '1'
|
|
assert o['MAXCHECK'] == '15'
|
|
assert o['DAMPLIMIT'] == '1'
|
|
|
|
o3 = get_option_v3(p)
|
|
assert o3['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_LPS
|
|
assert o3['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_KPA
|
|
assert o3['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_DW
|
|
assert o3['SPECIFIC_GRAVITY'] == '2.0'
|
|
assert o3['SPECIFIC_VISCOSITY'] == '2.0'
|
|
assert o3['MAXIMUM_TRIALS'] == '50'
|
|
assert o3['HEAD_TOLERANCE'] == '0.005'
|
|
assert o3['FLOW_TOLERANCE'] == '0.001'
|
|
assert o3['FLOW_CHANGE_LIMIT'] == '0.01'
|
|
assert o3['RELATIVE_ACCURACY'] == '0.0001'
|
|
assert o3['TIME_WEIGHT'] == '0.0'
|
|
assert o3['STEP_SIZING'] == OPTION_V3_STEP_SIZING_FULL
|
|
assert o3['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_CONTINUE
|
|
assert o3['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_POWER
|
|
assert o3['DEMAND_PATTERN'] == '2'
|
|
assert o3['DEMAND_MULTIPLIER'] == '2.0'
|
|
assert o3['MINIMUM_PRESSURE'] == '0.01'
|
|
assert o3['SERVICE_PRESSURE'] == '0.01'
|
|
assert o3['PRESSURE_EXPONENT'] == '0.05'
|
|
assert o3['LEAKAGE_MODEL'] == OPTION_V3_LEAKAGE_MODEL_NONE
|
|
assert o3['LEAKAGE_COEFF1'] == '0.0'
|
|
assert o3['LEAKAGE_COEFF2'] == '0.0'
|
|
assert o3['EMITTER_EXPONENT'] == '1.5'
|
|
assert o3['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_TRACE
|
|
assert o3['QUALITY_NAME'] == OPTION_V3_QUALITY_MODEL_CHEMICAL
|
|
assert o3['QUALITY_UNITS'] == OPTION_V3_QUALITY_UNITS_MGL
|
|
assert o3['TRACE_NODE'] == '1'
|
|
assert o3['SPECIFIC_DIFFUSIVITY'] == '2.0'
|
|
assert o3['QUALITY_TOLERANCE'] == '0.001'
|
|
|
|
o3['FLOW_UNITS'] = OPTION_V3_FLOW_UNITS_GPM
|
|
o3['PRESSURE_UNITS'] = OPTION_V3_PRESSURE_UNITS_PSI
|
|
o3['HEADLOSS_MODEL'] = OPTION_V3_HEADLOSS_MODEL_HW
|
|
o3['SPECIFIC_GRAVITY'] = '1.0'
|
|
o3['SPECIFIC_VISCOSITY'] = '1.0'
|
|
o3['MAXIMUM_TRIALS'] = '40'
|
|
o3['HEAD_TOLERANCE'] = '0.0005'
|
|
o3['FLOW_TOLERANCE'] = '0.0001'
|
|
o3['FLOW_CHANGE_LIMIT'] = '0.0'
|
|
o3['RELATIVE_ACCURACY'] = '0.001'
|
|
o3['TIME_WEIGHT'] = '0.0'
|
|
o3['STEP_SIZING'] = OPTION_V3_STEP_SIZING_RELAXATION
|
|
o3['IF_UNBALANCED'] = OPTION_V3_IF_UNBALANCED_STOP
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_FIXED
|
|
o3['DEMAND_PATTERN'] = '1'
|
|
o3['DEMAND_MULTIPLIER'] = '1.0'
|
|
o3['MINIMUM_PRESSURE'] = '0.0'
|
|
o3['SERVICE_PRESSURE'] = '0.1'
|
|
o3['PRESSURE_EXPONENT'] = '0.5'
|
|
o3['LEAKAGE_MODEL'] = OPTION_V3_LEAKAGE_MODEL_POWER
|
|
o3['LEAKAGE_COEFF1'] = '1.0'
|
|
o3['LEAKAGE_COEFF2'] = '2.0'
|
|
o3['EMITTER_EXPONENT'] = '0.5'
|
|
o3['QUALITY_MODEL'] = OPTION_V3_QUALITY_MODEL_TRACE
|
|
o3['QUALITY_NAME'] = OPTION_V3_QUALITY_MODEL_NONE
|
|
o3['QUALITY_UNITS'] = OPTION_V3_QUALITY_UNITS_HRS
|
|
o3['TRACE_NODE'] = '2'
|
|
o3['SPECIFIC_DIFFUSIVITY'] = '1.0'
|
|
o3['QUALITY_TOLERANCE'] = '0.01'
|
|
|
|
set_option_v3(p, ChangeSet(o3))
|
|
|
|
o3 = get_option_v3(p)
|
|
assert o3['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_GPM
|
|
assert o3['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_PSI
|
|
assert o3['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_HW
|
|
assert o3['SPECIFIC_GRAVITY'] == '1.0'
|
|
assert o3['SPECIFIC_VISCOSITY'] == '1.0'
|
|
assert o3['MAXIMUM_TRIALS'] == '40'
|
|
assert o3['HEAD_TOLERANCE'] == '0.0005'
|
|
assert o3['FLOW_TOLERANCE'] == '0.0001'
|
|
assert o3['FLOW_CHANGE_LIMIT'] == '0.0'
|
|
assert o3['RELATIVE_ACCURACY'] == '0.001'
|
|
assert o3['TIME_WEIGHT'] == '0.0'
|
|
assert o3['STEP_SIZING'] == OPTION_V3_STEP_SIZING_RELAXATION
|
|
assert o3['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_STOP
|
|
assert o3['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
assert o3['DEMAND_PATTERN'] == '1'
|
|
assert o3['DEMAND_MULTIPLIER'] == '1.0'
|
|
assert o3['MINIMUM_PRESSURE'] == '0.0'
|
|
assert o3['SERVICE_PRESSURE'] == '0.1'
|
|
assert o3['PRESSURE_EXPONENT'] == '0.5'
|
|
assert o3['LEAKAGE_MODEL'] == OPTION_V3_LEAKAGE_MODEL_POWER
|
|
assert o3['LEAKAGE_COEFF1'] == '1.0'
|
|
assert o3['LEAKAGE_COEFF2'] == '2.0'
|
|
assert o3['EMITTER_EXPONENT'] == '0.5'
|
|
assert o3['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_TRACE
|
|
assert o3['QUALITY_NAME'] == OPTION_V3_QUALITY_MODEL_NONE
|
|
assert o3['QUALITY_UNITS'] == OPTION_V3_QUALITY_UNITS_HRS
|
|
assert o3['TRACE_NODE'] == '2'
|
|
assert o3['SPECIFIC_DIFFUSIVITY'] == '1.0'
|
|
assert o3['QUALITY_TOLERANCE'] == '0.01'
|
|
|
|
o = get_option(p)
|
|
assert o['UNITS'] == OPTION_UNITS_GPM
|
|
assert o['PRESSURE'] == OPTION_PRESSURE_PSI
|
|
assert o['HEADLOSS'] == OPTION_HEADLOSS_HW
|
|
assert o['QUALITY'] == f'{OPTION_QUALITY_TRACE} 2'
|
|
assert o['UNBALANCED'] == OPTION_UNBALANCED_STOP
|
|
assert o['PATTERN'] == '1'
|
|
assert o['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
assert o['DEMAND MULTIPLIER'] == '1.0'
|
|
assert o['EMITTER EXPONENT'] == '0.5'
|
|
assert o['VISCOSITY'] == '1.0'
|
|
assert o['DIFFUSIVITY'] == '1.0'
|
|
assert o['SPECIFIC GRAVITY'] == '1.0'
|
|
assert o['TRIALS'] == '40'
|
|
assert o['ACCURACY'] == '0.001'
|
|
assert o['HEADERROR'] == '0.01'
|
|
assert o['FLOWCHANGE'] == '0.0'
|
|
assert o['MINIMUM PRESSURE'] == '0.0'
|
|
assert o['REQUIRED PRESSURE'] == '0.1'
|
|
assert o['PRESSURE EXPONENT'] == '0.5'
|
|
assert o['TOLERANCE'] == '0.01'
|
|
assert o['HTOL'] == '0.0005'
|
|
assert o['QTOL'] == '0.0001'
|
|
assert o['RQTOL'] == '0.000001'
|
|
assert o['CHECKFREQ'] == '1'
|
|
assert o['MAXCHECK'] == '15'
|
|
assert o['DAMPLIMIT'] == '1'
|
|
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_CONSTRAINED
|
|
set_option_v3(p, ChangeSet(o3))
|
|
assert o3['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_CONSTRAINED
|
|
o = get_option(p)
|
|
assert o['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_LOGISTIC
|
|
set_option_v3(p, ChangeSet(o3))
|
|
assert o3['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_LOGISTIC
|
|
o = get_option(p)
|
|
assert o['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_option_op(self):
|
|
p = 'test_option_op'
|
|
self.enter(p)
|
|
|
|
o = get_option(p)
|
|
assert o['UNITS'] == OPTION_UNITS_LPS
|
|
assert o['PRESSURE'] == OPTION_PRESSURE_METERS
|
|
assert o['HEADLOSS'] == OPTION_HEADLOSS_HW
|
|
assert o['QUALITY'] == OPTION_QUALITY_NONE
|
|
assert o['UNBALANCED'] == OPTION_UNBALANCED_STOP
|
|
assert o['PATTERN'] == '1'
|
|
assert o['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
assert o['DEMAND MULTIPLIER'] == '1.0'
|
|
assert o['EMITTER EXPONENT'] == '0.5'
|
|
assert o['VISCOSITY'] == '1.0'
|
|
assert o['DIFFUSIVITY'] == '1.0'
|
|
assert o['SPECIFIC GRAVITY'] == '1.0'
|
|
assert o['TRIALS'] == '40'
|
|
assert o['ACCURACY'] == '0.001'
|
|
assert o['HEADERROR'] == '0.0001'
|
|
assert o['FLOWCHANGE'] == '0.0001'
|
|
assert o['MINIMUM PRESSURE'] == '0.0001'
|
|
assert o['REQUIRED PRESSURE'] == '20.0'
|
|
assert o['PRESSURE EXPONENT'] == '0.5'
|
|
assert o['TOLERANCE'] == '0.01'
|
|
assert o['HTOL'] == '0.0005'
|
|
assert o['QTOL'] == '0.0001'
|
|
assert o['RQTOL'] == '0.0000001'
|
|
assert o['CHECKFREQ'] == '2'
|
|
assert o['MAXCHECK'] == '10'
|
|
assert o['DAMPLIMIT'] == '0'
|
|
|
|
o3 = get_option_v3(p)
|
|
assert o3['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_LPS
|
|
assert o3['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_METERS
|
|
assert o3['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_HW
|
|
assert o3['SPECIFIC_GRAVITY'] == '1.0'
|
|
assert o3['SPECIFIC_VISCOSITY'] == '1.0'
|
|
assert o3['MAXIMUM_TRIALS'] == '40'
|
|
assert o3['HEAD_TOLERANCE'] == '0.0005'
|
|
assert o3['FLOW_TOLERANCE'] == '0.0001'
|
|
assert o3['FLOW_CHANGE_LIMIT'] == '0.0001'
|
|
assert o3['RELATIVE_ACCURACY'] == '0.001'
|
|
assert o3['TIME_WEIGHT'] == '0.0'
|
|
assert o3['STEP_SIZING'] == OPTION_V3_STEP_SIZING_FULL
|
|
assert o3['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_STOP
|
|
assert o3['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
assert o3['DEMAND_PATTERN'] == '1'
|
|
assert o3['DEMAND_MULTIPLIER'] == '1.0'
|
|
assert o3['MINIMUM_PRESSURE'] == '0.0001'
|
|
assert o3['SERVICE_PRESSURE'] == '20.0'
|
|
assert o3['PRESSURE_EXPONENT'] == '0.5'
|
|
assert o3['LEAKAGE_MODEL'] == OPTION_V3_LEAKAGE_MODEL_NONE
|
|
assert o3['LEAKAGE_COEFF1'] == '0.0'
|
|
assert o3['LEAKAGE_COEFF2'] == '0.0'
|
|
assert o3['EMITTER_EXPONENT'] == '0.5'
|
|
assert o3['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_NONE
|
|
assert o3['QUALITY_NAME'] == OPTION_V3_QUALITY_MODEL_CHEMICAL
|
|
assert o3['QUALITY_UNITS'] == OPTION_V3_QUALITY_UNITS_MGL
|
|
assert o3['TRACE_NODE'] == ''
|
|
assert o3['SPECIFIC_DIFFUSIVITY'] == '1.0'
|
|
assert o3['QUALITY_TOLERANCE'] == '0.01'
|
|
|
|
o['UNITS'] = OPTION_UNITS_LPS
|
|
o['PRESSURE'] = OPTION_PRESSURE_KPA
|
|
o['HEADLOSS'] = OPTION_HEADLOSS_DW
|
|
o['QUALITY'] = f'{OPTION_QUALITY_TRACE} 1'
|
|
o['UNBALANCED'] = OPTION_UNBALANCED_CONTINUE
|
|
o['PATTERN'] = '2'
|
|
o['DEMAND MODEL'] = OPTION_DEMAND_MODEL_PDA
|
|
o['DEMAND MULTIPLIER'] = '2.0'
|
|
o['EMITTER EXPONENT'] = '1.5'
|
|
o['VISCOSITY'] = '2.0'
|
|
o['DIFFUSIVITY'] = '2.0'
|
|
o['SPECIFIC GRAVITY'] = '2.0'
|
|
o['TRIALS'] = '50'
|
|
o['ACCURACY'] = '0.0001'
|
|
o['HEADERROR'] = '0.01'
|
|
o['FLOWCHANGE'] = '0.01'
|
|
o['MINIMUM PRESSURE'] = '0.01'
|
|
o['REQUIRED PRESSURE'] = '0.01'
|
|
o['PRESSURE EXPONENT'] = '0.05'
|
|
o['TOLERANCE'] = '0.001'
|
|
o['HTOL'] = '0.005'
|
|
o['QTOL'] = '0.001'
|
|
o['RQTOL'] = '0.000001'
|
|
o['CHECKFREQ'] = '1'
|
|
o['MAXCHECK'] = '15'
|
|
o['DAMPLIMIT'] = '1'
|
|
|
|
css = set_option(p, ChangeSet(o)).operations
|
|
cs = css[0]
|
|
assert cs['UNITS'] == OPTION_UNITS_LPS
|
|
assert cs['PRESSURE'] == OPTION_PRESSURE_KPA
|
|
assert cs['HEADLOSS'] == OPTION_HEADLOSS_DW
|
|
assert cs['QUALITY'] == f'{OPTION_QUALITY_TRACE} 1'
|
|
assert cs['UNBALANCED'] == OPTION_UNBALANCED_CONTINUE
|
|
assert cs['PATTERN'] == '2'
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
assert cs['DEMAND MULTIPLIER'] == '2.0'
|
|
assert cs['EMITTER EXPONENT'] == '1.5'
|
|
assert cs['VISCOSITY'] == '2.0'
|
|
assert cs['DIFFUSIVITY'] == '2.0'
|
|
assert cs['SPECIFIC GRAVITY'] == '2.0'
|
|
assert cs['TRIALS'] == '50'
|
|
assert cs['ACCURACY'] == '0.0001'
|
|
assert cs['HEADERROR'] == '0.01'
|
|
assert cs['FLOWCHANGE'] == '0.01'
|
|
assert cs['MINIMUM PRESSURE'] == '0.01'
|
|
assert cs['REQUIRED PRESSURE'] == '0.01'
|
|
assert cs['PRESSURE EXPONENT'] == '0.05'
|
|
assert cs['TOLERANCE'] == '0.001'
|
|
assert cs['HTOL'] == '0.005'
|
|
assert cs['QTOL'] == '0.001'
|
|
assert cs['RQTOL'] == '0.000001'
|
|
assert cs['CHECKFREQ'] == '1'
|
|
assert cs['MAXCHECK'] == '15'
|
|
assert cs['DAMPLIMIT'] == '1'
|
|
cs = css[1]
|
|
assert cs['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_LPS
|
|
assert cs['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_KPA
|
|
assert cs['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_DW
|
|
assert cs['SPECIFIC_GRAVITY'] == '2.0'
|
|
assert cs['SPECIFIC_VISCOSITY'] == '2.0'
|
|
assert cs['MAXIMUM_TRIALS'] == '50'
|
|
assert cs['HEAD_TOLERANCE'] == '0.005'
|
|
assert cs['FLOW_TOLERANCE'] == '0.001'
|
|
assert cs['FLOW_CHANGE_LIMIT'] == '0.01'
|
|
assert cs['RELATIVE_ACCURACY'] == '0.0001'
|
|
assert cs['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_CONTINUE
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_POWER
|
|
assert cs['DEMAND_PATTERN'] == '2'
|
|
assert cs['DEMAND_MULTIPLIER'] == '2.0'
|
|
assert cs['MINIMUM_PRESSURE'] == '0.01'
|
|
assert cs['SERVICE_PRESSURE'] == '0.01'
|
|
assert cs['PRESSURE_EXPONENT'] == '0.05'
|
|
assert cs['EMITTER_EXPONENT'] == '1.5'
|
|
assert cs['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_TRACE
|
|
assert cs['TRACE_NODE'] == '1'
|
|
assert cs['SPECIFIC_DIFFUSIVITY'] == '2.0'
|
|
assert cs['QUALITY_TOLERANCE'] == '0.001'
|
|
|
|
css = execute_undo(p).operations
|
|
cs = css[0]
|
|
assert cs['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_LPS
|
|
assert cs['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_METERS
|
|
assert cs['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_HW
|
|
assert cs['SPECIFIC_GRAVITY'] == '1.0'
|
|
assert cs['SPECIFIC_VISCOSITY'] == '1.0'
|
|
assert cs['MAXIMUM_TRIALS'] == '40'
|
|
assert cs['HEAD_TOLERANCE'] == '0.0005'
|
|
assert cs['FLOW_TOLERANCE'] == '0.0001'
|
|
assert cs['FLOW_CHANGE_LIMIT'] == '0.0001'
|
|
assert cs['RELATIVE_ACCURACY'] == '0.001'
|
|
assert cs['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_STOP
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
assert cs['DEMAND_PATTERN'] == '1'
|
|
assert cs['DEMAND_MULTIPLIER'] == '1.0'
|
|
assert cs['MINIMUM_PRESSURE'] == '0.0001'
|
|
assert cs['SERVICE_PRESSURE'] == '20.0'
|
|
assert cs['PRESSURE_EXPONENT'] == '0.5'
|
|
assert cs['EMITTER_EXPONENT'] == '0.5'
|
|
assert cs['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_NONE
|
|
assert cs['TRACE_NODE'] == ''
|
|
assert cs['SPECIFIC_DIFFUSIVITY'] == '1.0'
|
|
assert cs['QUALITY_TOLERANCE'] == '0.01'
|
|
cs = css[1]
|
|
assert cs['UNITS'] == OPTION_UNITS_LPS
|
|
assert cs['PRESSURE'] == OPTION_PRESSURE_METERS
|
|
assert cs['HEADLOSS'] == OPTION_HEADLOSS_HW
|
|
assert cs['QUALITY'] == OPTION_QUALITY_NONE
|
|
assert cs['UNBALANCED'] == OPTION_UNBALANCED_STOP
|
|
assert cs['PATTERN'] == '1'
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
assert cs['DEMAND MULTIPLIER'] == '1.0'
|
|
assert cs['EMITTER EXPONENT'] == '0.5'
|
|
assert cs['VISCOSITY'] == '1.0'
|
|
assert cs['DIFFUSIVITY'] == '1.0'
|
|
assert cs['SPECIFIC GRAVITY'] == '1.0'
|
|
assert cs['TRIALS'] == '40'
|
|
assert cs['ACCURACY'] == '0.001'
|
|
assert cs['HEADERROR'] == '0.0001'
|
|
assert cs['FLOWCHANGE'] == '0.0001'
|
|
assert cs['MINIMUM PRESSURE'] == '0.0001'
|
|
assert cs['REQUIRED PRESSURE'] == '20.0'
|
|
assert cs['PRESSURE EXPONENT'] == '0.5'
|
|
assert cs['TOLERANCE'] == '0.01'
|
|
assert cs['HTOL'] == '0.0005'
|
|
assert cs['QTOL'] == '0.0001'
|
|
assert cs['RQTOL'] == '0.0000001'
|
|
assert cs['CHECKFREQ'] == '2'
|
|
assert cs['MAXCHECK'] == '10'
|
|
assert cs['DAMPLIMIT'] == '0'
|
|
|
|
css = execute_redo(p).operations
|
|
cs = css[0]
|
|
assert cs['UNITS'] == OPTION_UNITS_LPS
|
|
assert cs['PRESSURE'] == OPTION_PRESSURE_KPA
|
|
assert cs['HEADLOSS'] == OPTION_HEADLOSS_DW
|
|
assert cs['QUALITY'] == f'{OPTION_QUALITY_TRACE} 1'
|
|
assert cs['UNBALANCED'] == OPTION_UNBALANCED_CONTINUE
|
|
assert cs['PATTERN'] == '2'
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
assert cs['DEMAND MULTIPLIER'] == '2.0'
|
|
assert cs['EMITTER EXPONENT'] == '1.5'
|
|
assert cs['VISCOSITY'] == '2.0'
|
|
assert cs['DIFFUSIVITY'] == '2.0'
|
|
assert cs['SPECIFIC GRAVITY'] == '2.0'
|
|
assert cs['TRIALS'] == '50'
|
|
assert cs['ACCURACY'] == '0.0001'
|
|
assert cs['HEADERROR'] == '0.01'
|
|
assert cs['FLOWCHANGE'] == '0.01'
|
|
assert cs['MINIMUM PRESSURE'] == '0.01'
|
|
assert cs['REQUIRED PRESSURE'] == '0.01'
|
|
assert cs['PRESSURE EXPONENT'] == '0.05'
|
|
assert cs['TOLERANCE'] == '0.001'
|
|
assert cs['HTOL'] == '0.005'
|
|
assert cs['QTOL'] == '0.001'
|
|
assert cs['RQTOL'] == '0.000001'
|
|
assert cs['CHECKFREQ'] == '1'
|
|
assert cs['MAXCHECK'] == '15'
|
|
assert cs['DAMPLIMIT'] == '1'
|
|
cs = css[1]
|
|
assert cs['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_LPS
|
|
assert cs['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_KPA
|
|
assert cs['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_DW
|
|
assert cs['SPECIFIC_GRAVITY'] == '2.0'
|
|
assert cs['SPECIFIC_VISCOSITY'] == '2.0'
|
|
assert cs['MAXIMUM_TRIALS'] == '50'
|
|
assert cs['HEAD_TOLERANCE'] == '0.005'
|
|
assert cs['FLOW_TOLERANCE'] == '0.001'
|
|
assert cs['FLOW_CHANGE_LIMIT'] == '0.01'
|
|
assert cs['RELATIVE_ACCURACY'] == '0.0001'
|
|
assert cs['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_CONTINUE
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_POWER
|
|
assert cs['DEMAND_PATTERN'] == '2'
|
|
assert cs['DEMAND_MULTIPLIER'] == '2.0'
|
|
assert cs['MINIMUM_PRESSURE'] == '0.01'
|
|
assert cs['SERVICE_PRESSURE'] == '0.01'
|
|
assert cs['PRESSURE_EXPONENT'] == '0.05'
|
|
assert cs['EMITTER_EXPONENT'] == '1.5'
|
|
assert cs['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_TRACE
|
|
assert cs['TRACE_NODE'] == '1'
|
|
assert cs['SPECIFIC_DIFFUSIVITY'] == '2.0'
|
|
assert cs['QUALITY_TOLERANCE'] == '0.001'
|
|
|
|
o3['FLOW_UNITS'] = OPTION_V3_FLOW_UNITS_GPM
|
|
o3['PRESSURE_UNITS'] = OPTION_V3_PRESSURE_UNITS_PSI
|
|
o3['HEADLOSS_MODEL'] = OPTION_V3_HEADLOSS_MODEL_HW
|
|
o3['SPECIFIC_GRAVITY'] = '1.0'
|
|
o3['SPECIFIC_VISCOSITY'] = '1.0'
|
|
o3['MAXIMUM_TRIALS'] = '40'
|
|
o3['HEAD_TOLERANCE'] = '0.0005'
|
|
o3['FLOW_TOLERANCE'] = '0.0001'
|
|
o3['FLOW_CHANGE_LIMIT'] = '0.0'
|
|
o3['RELATIVE_ACCURACY'] = '0.001'
|
|
o3['TIME_WEIGHT'] = '0.0'
|
|
o3['STEP_SIZING'] = OPTION_V3_STEP_SIZING_RELAXATION
|
|
o3['IF_UNBALANCED'] = OPTION_V3_IF_UNBALANCED_STOP
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_FIXED
|
|
o3['DEMAND_PATTERN'] = '1'
|
|
o3['DEMAND_MULTIPLIER'] = '1.0'
|
|
o3['MINIMUM_PRESSURE'] = '0.0'
|
|
o3['SERVICE_PRESSURE'] = '0.1'
|
|
o3['PRESSURE_EXPONENT'] = '0.5'
|
|
o3['LEAKAGE_MODEL'] = OPTION_V3_LEAKAGE_MODEL_POWER
|
|
o3['LEAKAGE_COEFF1'] = '1.0'
|
|
o3['LEAKAGE_COEFF2'] = '2.0'
|
|
o3['EMITTER_EXPONENT'] = '0.5'
|
|
o3['QUALITY_MODEL'] = OPTION_V3_QUALITY_MODEL_TRACE
|
|
o3['QUALITY_NAME'] = OPTION_V3_QUALITY_MODEL_NONE
|
|
o3['QUALITY_UNITS'] = OPTION_V3_QUALITY_UNITS_HRS
|
|
o3['TRACE_NODE'] = '2'
|
|
o3['SPECIFIC_DIFFUSIVITY'] = '1.0'
|
|
o3['QUALITY_TOLERANCE'] = '0.01'
|
|
|
|
css = set_option_v3(p, ChangeSet(o3)).operations
|
|
cs = css[0]
|
|
assert cs['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_GPM
|
|
assert cs['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_PSI
|
|
assert cs['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_HW
|
|
assert cs['SPECIFIC_GRAVITY'] == '1.0'
|
|
assert cs['SPECIFIC_VISCOSITY'] == '1.0'
|
|
assert cs['MAXIMUM_TRIALS'] == '40'
|
|
assert cs['HEAD_TOLERANCE'] == '0.0005'
|
|
assert cs['FLOW_TOLERANCE'] == '0.0001'
|
|
assert cs['FLOW_CHANGE_LIMIT'] == '0.0'
|
|
assert cs['RELATIVE_ACCURACY'] == '0.001'
|
|
assert cs['TIME_WEIGHT'] == '0.0'
|
|
assert cs['STEP_SIZING'] == OPTION_V3_STEP_SIZING_RELAXATION
|
|
assert cs['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_STOP
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
assert cs['DEMAND_PATTERN'] == '1'
|
|
assert cs['DEMAND_MULTIPLIER'] == '1.0'
|
|
assert cs['MINIMUM_PRESSURE'] == '0.0'
|
|
assert cs['SERVICE_PRESSURE'] == '0.1'
|
|
assert cs['PRESSURE_EXPONENT'] == '0.5'
|
|
assert cs['LEAKAGE_MODEL'] == OPTION_V3_LEAKAGE_MODEL_POWER
|
|
assert cs['LEAKAGE_COEFF1'] == '1.0'
|
|
assert cs['LEAKAGE_COEFF2'] == '2.0'
|
|
assert cs['EMITTER_EXPONENT'] == '0.5'
|
|
assert cs['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_TRACE
|
|
assert cs['QUALITY_NAME'] == OPTION_V3_QUALITY_MODEL_NONE
|
|
assert cs['QUALITY_UNITS'] == OPTION_V3_QUALITY_UNITS_HRS
|
|
assert cs['TRACE_NODE'] == '2'
|
|
assert cs['SPECIFIC_DIFFUSIVITY'] == '1.0'
|
|
assert cs['QUALITY_TOLERANCE'] == '0.01'
|
|
cs = css[1]
|
|
assert cs['UNITS'] == OPTION_UNITS_GPM
|
|
assert cs['PRESSURE'] == OPTION_PRESSURE_PSI
|
|
assert cs['HEADLOSS'] == OPTION_HEADLOSS_HW
|
|
assert cs['QUALITY'] == f'{OPTION_QUALITY_TRACE} 2'
|
|
assert cs['UNBALANCED'] == OPTION_UNBALANCED_STOP
|
|
assert cs['PATTERN'] == '1'
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
assert cs['DEMAND MULTIPLIER'] == '1.0'
|
|
assert cs['EMITTER EXPONENT'] == '0.5'
|
|
assert cs['VISCOSITY'] == '1.0'
|
|
assert cs['DIFFUSIVITY'] == '1.0'
|
|
assert cs['SPECIFIC GRAVITY'] == '1.0'
|
|
assert cs['TRIALS'] == '40'
|
|
assert cs['ACCURACY'] == '0.001'
|
|
assert cs['FLOWCHANGE'] == '0.0'
|
|
assert cs['MINIMUM PRESSURE'] == '0.0'
|
|
assert cs['REQUIRED PRESSURE'] == '0.1'
|
|
assert cs['PRESSURE EXPONENT'] == '0.5'
|
|
assert cs['TOLERANCE'] == '0.01'
|
|
assert cs['HTOL'] == '0.0005'
|
|
assert cs['QTOL'] == '0.0001'
|
|
|
|
css = execute_undo(p).operations
|
|
cs = css[0]
|
|
assert cs['UNITS'] == OPTION_UNITS_LPS
|
|
assert cs['PRESSURE'] == OPTION_PRESSURE_KPA
|
|
assert cs['HEADLOSS'] == OPTION_HEADLOSS_DW
|
|
assert cs['QUALITY'] == f'{OPTION_QUALITY_TRACE} 1'
|
|
assert cs['UNBALANCED'] == OPTION_UNBALANCED_CONTINUE
|
|
assert cs['PATTERN'] == '2'
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
assert cs['DEMAND MULTIPLIER'] == '2.0'
|
|
assert cs['EMITTER EXPONENT'] == '1.5'
|
|
assert cs['VISCOSITY'] == '2.0'
|
|
assert cs['DIFFUSIVITY'] == '2.0'
|
|
assert cs['SPECIFIC GRAVITY'] == '2.0'
|
|
assert cs['TRIALS'] == '50'
|
|
assert cs['ACCURACY'] == '0.0001'
|
|
assert cs['FLOWCHANGE'] == '0.01'
|
|
assert cs['MINIMUM PRESSURE'] == '0.01'
|
|
assert cs['REQUIRED PRESSURE'] == '0.01'
|
|
assert cs['PRESSURE EXPONENT'] == '0.05'
|
|
assert cs['TOLERANCE'] == '0.001'
|
|
assert cs['HTOL'] == '0.005'
|
|
assert cs['QTOL'] == '0.001'
|
|
cs = css[1]
|
|
o3['FLOW_UNITS'] = OPTION_V3_FLOW_UNITS_GPM
|
|
o3['PRESSURE_UNITS'] = OPTION_V3_PRESSURE_UNITS_PSI
|
|
o3['HEADLOSS_MODEL'] = OPTION_V3_HEADLOSS_MODEL_HW
|
|
o3['SPECIFIC_GRAVITY'] = '1.0'
|
|
o3['SPECIFIC_VISCOSITY'] = '1.0'
|
|
o3['MAXIMUM_TRIALS'] = '40'
|
|
o3['HEAD_TOLERANCE'] = '0.0005'
|
|
o3['FLOW_TOLERANCE'] = '0.0001'
|
|
o3['FLOW_CHANGE_LIMIT'] = '0.0'
|
|
o3['RELATIVE_ACCURACY'] = '0.001'
|
|
o3['TIME_WEIGHT'] = '0.0'
|
|
o3['STEP_SIZING'] = OPTION_V3_STEP_SIZING_RELAXATION
|
|
o3['IF_UNBALANCED'] = OPTION_V3_IF_UNBALANCED_STOP
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_FIXED
|
|
o3['DEMAND_PATTERN'] = '1'
|
|
o3['DEMAND_MULTIPLIER'] = '1.0'
|
|
o3['MINIMUM_PRESSURE'] = '0.0'
|
|
o3['SERVICE_PRESSURE'] = '0.1'
|
|
o3['PRESSURE_EXPONENT'] = '0.5'
|
|
o3['LEAKAGE_MODEL'] = OPTION_V3_LEAKAGE_MODEL_POWER
|
|
o3['LEAKAGE_COEFF1'] = '1.0'
|
|
o3['LEAKAGE_COEFF2'] = '2.0'
|
|
o3['EMITTER_EXPONENT'] = '0.5'
|
|
o3['QUALITY_MODEL'] = OPTION_V3_QUALITY_MODEL_TRACE
|
|
o3['QUALITY_NAME'] = OPTION_V3_QUALITY_MODEL_NONE
|
|
o3['QUALITY_UNITS'] = OPTION_V3_QUALITY_UNITS_HRS
|
|
o3['TRACE_NODE'] = '2'
|
|
o3['SPECIFIC_DIFFUSIVITY'] = '1.0'
|
|
o3['QUALITY_TOLERANCE'] = '0.01'
|
|
|
|
css = execute_redo(p).operations
|
|
cs = css[0]
|
|
assert cs['FLOW_UNITS'] == OPTION_V3_FLOW_UNITS_GPM
|
|
assert cs['PRESSURE_UNITS'] == OPTION_V3_PRESSURE_UNITS_PSI
|
|
assert cs['HEADLOSS_MODEL'] == OPTION_V3_HEADLOSS_MODEL_HW
|
|
assert cs['SPECIFIC_GRAVITY'] == '1.0'
|
|
assert cs['SPECIFIC_VISCOSITY'] == '1.0'
|
|
assert cs['MAXIMUM_TRIALS'] == '40'
|
|
assert cs['HEAD_TOLERANCE'] == '0.0005'
|
|
assert cs['FLOW_TOLERANCE'] == '0.0001'
|
|
assert cs['FLOW_CHANGE_LIMIT'] == '0.0'
|
|
assert cs['RELATIVE_ACCURACY'] == '0.001'
|
|
assert cs['TIME_WEIGHT'] == '0.0'
|
|
assert cs['STEP_SIZING'] == OPTION_V3_STEP_SIZING_RELAXATION
|
|
assert cs['IF_UNBALANCED'] == OPTION_V3_IF_UNBALANCED_STOP
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
assert cs['DEMAND_PATTERN'] == '1'
|
|
assert cs['DEMAND_MULTIPLIER'] == '1.0'
|
|
assert cs['MINIMUM_PRESSURE'] == '0.0'
|
|
assert cs['SERVICE_PRESSURE'] == '0.1'
|
|
assert cs['PRESSURE_EXPONENT'] == '0.5'
|
|
assert cs['LEAKAGE_MODEL'] == OPTION_V3_LEAKAGE_MODEL_POWER
|
|
assert cs['LEAKAGE_COEFF1'] == '1.0'
|
|
assert cs['LEAKAGE_COEFF2'] == '2.0'
|
|
assert cs['EMITTER_EXPONENT'] == '0.5'
|
|
assert cs['QUALITY_MODEL'] == OPTION_V3_QUALITY_MODEL_TRACE
|
|
assert cs['QUALITY_NAME'] == OPTION_V3_QUALITY_MODEL_NONE
|
|
assert cs['QUALITY_UNITS'] == OPTION_V3_QUALITY_UNITS_HRS
|
|
assert cs['TRACE_NODE'] == '2'
|
|
assert cs['SPECIFIC_DIFFUSIVITY'] == '1.0'
|
|
assert cs['QUALITY_TOLERANCE'] == '0.01'
|
|
cs = css[1]
|
|
assert cs['UNITS'] == OPTION_UNITS_GPM
|
|
assert cs['PRESSURE'] == OPTION_PRESSURE_PSI
|
|
assert cs['HEADLOSS'] == OPTION_HEADLOSS_HW
|
|
assert cs['QUALITY'] == f'{OPTION_QUALITY_TRACE} 2'
|
|
assert cs['UNBALANCED'] == OPTION_UNBALANCED_STOP
|
|
assert cs['PATTERN'] == '1'
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
assert cs['DEMAND MULTIPLIER'] == '1.0'
|
|
assert cs['EMITTER EXPONENT'] == '0.5'
|
|
assert cs['VISCOSITY'] == '1.0'
|
|
assert cs['DIFFUSIVITY'] == '1.0'
|
|
assert cs['SPECIFIC GRAVITY'] == '1.0'
|
|
assert cs['TRIALS'] == '40'
|
|
assert cs['ACCURACY'] == '0.001'
|
|
assert cs['FLOWCHANGE'] == '0.0'
|
|
assert cs['MINIMUM PRESSURE'] == '0.0'
|
|
assert cs['REQUIRED PRESSURE'] == '0.1'
|
|
assert cs['PRESSURE EXPONENT'] == '0.5'
|
|
assert cs['TOLERANCE'] == '0.01'
|
|
assert cs['HTOL'] == '0.0005'
|
|
assert cs['QTOL'] == '0.0001'
|
|
|
|
o3 = get_option_v3(p)
|
|
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_CONSTRAINED
|
|
|
|
css = set_option_v3(p, ChangeSet(o3)).operations
|
|
cs = css[0]
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_CONSTRAINED
|
|
cs = css[1]
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
|
|
css = execute_undo(p).operations
|
|
cs = css[0]
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_DDA
|
|
cs = css[1]
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_FIXED
|
|
|
|
css = execute_redo(p).operations
|
|
cs = css[0]
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_CONSTRAINED
|
|
cs = css[1]
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
|
|
o3 = get_option_v3(p)
|
|
|
|
o3['DEMAND_MODEL'] = OPTION_V3_DEMAND_MODEL_LOGISTIC
|
|
|
|
css = set_option_v3(p, ChangeSet(o3)).operations
|
|
cs = css[0]
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_LOGISTIC
|
|
cs = css[1]
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
|
|
css = execute_undo(p).operations
|
|
cs = css[0]
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
cs = css[1]
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_CONSTRAINED
|
|
|
|
css = execute_redo(p).operations
|
|
cs = css[0]
|
|
assert cs['DEMAND_MODEL'] == OPTION_V3_DEMAND_MODEL_LOGISTIC
|
|
cs = css[1]
|
|
assert cs['DEMAND MODEL'] == OPTION_DEMAND_MODEL_PDA
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 25 vertex
|
|
|
|
|
|
def test_vertex(self):
|
|
p = 'test_vertex'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
|
|
v = get_vertex(p, 'p0')
|
|
assert v['link'] == 'p0'
|
|
assert v['coords'] == []
|
|
|
|
set_vertex(p, ChangeSet({'link' : 'p0', 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]}))
|
|
|
|
v = get_vertex(p, 'p0')
|
|
xys = v['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
set_vertex(p, ChangeSet({'link' : 'p0', 'coords': []}))
|
|
|
|
v = get_vertex(p, 'p0')
|
|
assert v['link'] == 'p0'
|
|
assert v['coords'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_vertex_op(self):
|
|
p = 'test_vertex_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
|
|
cs = set_vertex(p, ChangeSet({'link' : 'p0', 'coords': [{'x': 1.0, 'y': 2.0}, {'x': 2.0, 'y': 1.0}]})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'vertex'
|
|
assert cs['link'] == 'p0'
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'vertex'
|
|
assert cs['link'] == 'p0'
|
|
assert cs['coords'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'vertex'
|
|
assert cs['link'] == 'p0'
|
|
xys = cs['coords']
|
|
assert len(xys) == 2
|
|
assert xys[0]['x'] == 1.0
|
|
assert xys[0]['y'] == 2.0
|
|
assert xys[1]['x'] == 2.0
|
|
assert xys[1]['y'] == 1.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 26 label
|
|
|
|
|
|
def test_label(self):
|
|
p = 'test_label'
|
|
self.enter(p)
|
|
|
|
l = get_label(p, 0.0, 0.0)
|
|
assert l['x'] == 0.0
|
|
assert l['y'] == 0.0
|
|
assert l['label'] == None
|
|
assert l['node'] == None
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_label(p, ChangeSet({'x': 0.0, 'y': 0.0, 'label': 'x', 'node': 'j0'}))
|
|
l = get_label(p, 0.0, 0.0)
|
|
assert l['x'] == 0.0
|
|
assert l['y'] == 0.0
|
|
assert l['label'] == 'x'
|
|
assert l['node'] == 'j0'
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 1.0, 'y': 20.0, 'elevation': 20.0}))
|
|
set_label(p, ChangeSet({'x': 0.0, 'y': 0.0, 'label': 'xxx', 'node': 'j1'}))
|
|
l = get_label(p, 0.0, 0.0)
|
|
assert l['x'] == 0.0
|
|
assert l['y'] == 0.0
|
|
assert l['label'] == 'xxx'
|
|
assert l['node'] == 'j1'
|
|
|
|
delete_label(p, ChangeSet({'x': 0.0, 'y': 0.0}))
|
|
l = get_label(p, 0.0, 0.0)
|
|
assert l['x'] == 0.0
|
|
assert l['y'] == 0.0
|
|
assert l['label'] == None
|
|
assert l['node'] == None
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_label_op(self):
|
|
p = 'test_label_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 1.0, 'y': 20.0, 'elevation': 20.0}))
|
|
|
|
cs = add_label(p, ChangeSet({'x': 0.0, 'y': 0.0, 'label': 'x', 'node': 'j0'})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
assert cs['label'] == 'x'
|
|
assert cs['node'] == 'j0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
assert cs['label'] == 'x'
|
|
assert cs['node'] == 'j0'
|
|
|
|
cs = set_label(p, ChangeSet({'x': 0.0, 'y': 0.0, 'label': 'xxx', 'node': 'j1'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
assert cs['label'] == 'xxx'
|
|
assert cs['node'] == 'j1'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
assert cs['label'] == 'x'
|
|
assert cs['node'] == 'j0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
assert cs['label'] == 'xxx'
|
|
assert cs['node'] == 'j1'
|
|
|
|
cs = delete_label(p, ChangeSet({'x': 0.0, 'y': 0.0})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
assert cs['label'] == 'xxx'
|
|
assert cs['node'] == 'j1'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'label'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 0.0
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 27 backdrop
|
|
|
|
|
|
def test_backdrop(self):
|
|
p = 'test_backdrop'
|
|
self.enter(p)
|
|
|
|
assert get_backdrop(p)['content'] == ''
|
|
|
|
set_backdrop(p, ChangeSet({'content': 'x'}))
|
|
assert get_backdrop(p)['content'] == 'x'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_backdrop_op(self):
|
|
p = 'test_backdrop_op'
|
|
self.enter(p)
|
|
|
|
cs = set_backdrop(p, ChangeSet({'content': 'x'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'backdrop'
|
|
assert cs['content'] == 'x'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'backdrop'
|
|
assert cs['content'] == ''
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'backdrop'
|
|
assert cs['content'] == 'x'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 28 end
|
|
|
|
|
|
# 29 scada_device
|
|
|
|
|
|
def test_scada_device(self):
|
|
p = 'test_scada_device'
|
|
self.enter(p)
|
|
|
|
assert get_all_scada_device_ids(p) == []
|
|
|
|
d = get_scada_device(p, 'd0')
|
|
assert d == {}
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'd0'}))
|
|
d = get_scada_device(p, 'd0')
|
|
assert d['id'] == 'd0'
|
|
assert d['name'] == None
|
|
assert d['address'] == None
|
|
assert d['sd_type'] == None
|
|
|
|
set_scada_device(p, ChangeSet({'id': 'd0', 'name': 'device0', 'address': 'x', 'sd_type': SCADA_DEVICE_TYPE_FLOW}))
|
|
d = get_scada_device(p, 'd0')
|
|
assert d['id'] == 'd0'
|
|
assert d['name'] == 'device0'
|
|
assert d['address'] == 'x'
|
|
assert d['sd_type'] == SCADA_DEVICE_TYPE_FLOW
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'd1', 'name': 'device1', 'address': 'x', 'sd_type': SCADA_DEVICE_TYPE_PRESSURE}))
|
|
d = get_scada_device(p, 'd1')
|
|
assert d['id'] == 'd1'
|
|
assert d['name'] == 'device1'
|
|
assert d['address'] == 'x'
|
|
assert d['sd_type'] == SCADA_DEVICE_TYPE_PRESSURE
|
|
|
|
devices = get_all_scada_device_ids(p)
|
|
assert len(devices) == 2
|
|
assert devices[0] == 'd0'
|
|
assert devices[1] == 'd1'
|
|
|
|
delete_scada_device(p, ChangeSet({'id': 'd0'}))
|
|
d = get_scada_device(p, 'd0')
|
|
assert d == {}
|
|
|
|
delete_scada_device(p, ChangeSet({'id': 'd1'}))
|
|
d = get_scada_device(p, 'd1')
|
|
assert d == {}
|
|
|
|
assert get_all_scada_device_ids(p) == []
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'd0'}))
|
|
d = get_scada_device(p, 'd0')
|
|
assert d['id'] == 'd0'
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'd1'}))
|
|
d = get_scada_device(p, 'd1')
|
|
assert d['id'] == 'd1'
|
|
|
|
devices = get_all_scada_device_ids(p)
|
|
assert len(devices) == 2
|
|
assert devices[0] == 'd0'
|
|
assert devices[1] == 'd1'
|
|
|
|
clean_scada_device(p)
|
|
d = get_scada_device(p, 'd0')
|
|
assert d == {}
|
|
d = get_scada_device(p, 'd1')
|
|
assert d == {}
|
|
|
|
assert get_all_scada_device_ids(p) == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_scada_device_op(self):
|
|
p = 'test_scada_device_op'
|
|
|
|
self.enter(p)
|
|
|
|
cs = add_scada_device(p, ChangeSet({'id': 'd0'})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
cs = set_scada_device(p, ChangeSet({'id': 'd0', 'name': 'device0', 'address': 'x', 'sd_type': SCADA_DEVICE_TYPE_FLOW})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == 'device0'
|
|
assert cs['address'] == 'x'
|
|
assert cs['sd_type'] == SCADA_DEVICE_TYPE_FLOW
|
|
|
|
cs = add_scada_device(p, ChangeSet({'id': 'd1', 'name': 'device1', 'address': 'x', 'sd_type': SCADA_DEVICE_TYPE_PRESSURE})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
assert cs['name'] == 'device1'
|
|
assert cs['address'] == 'x'
|
|
assert cs['sd_type'] == SCADA_DEVICE_TYPE_PRESSURE
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
assert cs['name'] == 'device1'
|
|
assert cs['address'] == 'x'
|
|
assert cs['sd_type'] == SCADA_DEVICE_TYPE_PRESSURE
|
|
|
|
cs = delete_scada_device(p, ChangeSet({'id': 'd0'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == 'device0'
|
|
assert cs['address'] == 'x'
|
|
assert cs['sd_type'] == SCADA_DEVICE_TYPE_FLOW
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
|
|
cs = delete_scada_device(p, ChangeSet({'id': 'd1'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
assert cs['name'] == 'device1'
|
|
assert cs['address'] == 'x'
|
|
assert cs['sd_type'] == SCADA_DEVICE_TYPE_PRESSURE
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
|
|
cs = add_scada_device(p, ChangeSet({'id': 'd0'})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
cs = add_scada_device(p, ChangeSet({'id': 'd1'})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
css = clean_scada_device(p).operations
|
|
assert len(css) == 2
|
|
cs = css[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
cs = css[1]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
|
|
css = execute_undo(p).operations
|
|
assert len(css) == 2
|
|
cs = css[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
cs = css[1]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
assert cs['name'] == None
|
|
assert cs['address'] == None
|
|
assert cs['sd_type'] == None
|
|
|
|
css = execute_redo(p).operations
|
|
assert len(css) == 2
|
|
cs = css[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd0'
|
|
cs = css[1]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device'
|
|
assert cs['id'] == 'd1'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 30 scada_device_data
|
|
|
|
|
|
def test_scada_device_data(self):
|
|
p = 'test_scada_device_data'
|
|
self.enter(p)
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'sd'}))
|
|
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert sa['data'] == []
|
|
|
|
set_scada_device_data(p, ChangeSet({'device_id': 'sd', 'data': [{ 'time': '2023-02-10 00:02:22', 'value': 100.0 }]}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert len(sa['data']) == 1
|
|
assert sa['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert sa['data'][0]['value'] == 100.0
|
|
|
|
set_scada_device_data(p, ChangeSet({'device_id': 'sd', 'data': [{ 'time': '2023-02-10 00:02:22', 'value': 100.0 }, { 'time': '2023-02-10 00:03:22', 'value': 200.0 }]}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert len(sa['data']) == 2
|
|
assert sa['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert sa['data'][0]['value'] == 100.0
|
|
assert sa['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert sa['data'][1]['value'] == 200.0
|
|
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-10 00:02:22', 'value': 100.0}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert len(sa['data']) == 2
|
|
assert sa['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert sa['data'][0]['value'] == 100.0
|
|
assert sa['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert sa['data'][1]['value'] == 200.0
|
|
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-11 00:02:22', 'value': 100.0}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert len(sa['data']) == 3
|
|
assert sa['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert sa['data'][0]['value'] == 100.0
|
|
assert sa['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert sa['data'][1]['value'] == 200.0
|
|
assert sa['data'][2]['time'] == '2023-02-11 00:02:22'
|
|
assert sa['data'][2]['value'] == 100.0
|
|
|
|
delete_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-12 00:02:22'}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert len(sa['data']) == 3
|
|
assert sa['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert sa['data'][0]['value'] == 100.0
|
|
assert sa['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert sa['data'][1]['value'] == 200.0
|
|
assert sa['data'][2]['time'] == '2023-02-11 00:02:22'
|
|
assert sa['data'][2]['value'] == 100.0
|
|
|
|
delete_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-11 00:02:22'}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert len(sa['data']) == 2
|
|
assert sa['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert sa['data'][0]['value'] == 100.0
|
|
assert sa['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert sa['data'][1]['value'] == 200.0
|
|
|
|
set_scada_device_data(p, ChangeSet({'device_id': 'sd', 'data': []}))
|
|
sa = get_scada_device_data(p, 'sd')
|
|
assert sa['device_id'] == 'sd'
|
|
assert sa['data'] == []
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'sd0'}))
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd0', 'time': '2023-02-10 00:02:22', 'value': 100.0}))
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd0', 'time': '2023-02-11 00:02:22', 'value': 200.0}))
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd0', 'time': '2023-02-12 00:02:22', 'value': 300.0}))
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'sd1'}))
|
|
set_scada_device_data(p, ChangeSet({'device_id': 'sd1', 'data': [{'time': '2023-02-10 00:02:22', 'value': 100.0}, {'time': '2023-02-11 00:02:22', 'value': 200.0}, {'time': '2023-02-12 00:02:22', 'value': 300.0}]}))
|
|
|
|
clean_scada_device_data(p)
|
|
sa = get_scada_device_data(p, 'sd0')
|
|
assert sa['device_id'] == 'sd0'
|
|
assert sa['data'] == []
|
|
sa = get_scada_device_data(p, 'sd1')
|
|
assert sa['device_id'] == 'sd1'
|
|
assert sa['data'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_scada_device_data_op(self):
|
|
p = 'test_scada_device_data_op'
|
|
self.enter(p)
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'sd'}))
|
|
|
|
cs = set_scada_device_data(p, ChangeSet({'device_id': 'sd', 'data': [{ 'time': '2023-02-10 00:02:22', 'value': 100.0 }]})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert len(cs['data']) == 1
|
|
assert cs['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert cs['data'][0]['value'] == 100.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['data'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert len(cs['data']) == 1
|
|
assert cs['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert cs['data'][0]['value'] == 100.0
|
|
|
|
cs = set_scada_device_data(p, ChangeSet({'device_id': 'sd', 'data': [{ 'time': '2023-02-10 00:02:22', 'value': 100.0 }, { 'time': '2023-02-10 00:03:22', 'value': 200.0 }]})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert len(cs['data']) == 2
|
|
assert cs['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert cs['data'][0]['value'] == 100.0
|
|
assert cs['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert cs['data'][1]['value'] == 200.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert len(cs['data']) == 1
|
|
assert cs['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert cs['data'][0]['value'] == 100.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert len(cs['data']) == 2
|
|
assert cs['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert cs['data'][0]['value'] == 100.0
|
|
assert cs['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert cs['data'][1]['value'] == 200.0
|
|
|
|
cs = add_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-10 00:02:22', 'value': 100.0}))
|
|
assert len(cs.operations) == 0
|
|
|
|
cs = add_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-11 00:02:22', 'value': 100.0})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['time'] == '2023-02-11 00:02:22'
|
|
assert cs['value'] == 100.0
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['time'] == '2023-02-11 00:02:22'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['time'] == '2023-02-11 00:02:22'
|
|
assert cs['value'] == 100.0
|
|
|
|
cs = delete_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-12 00:02:22'}))
|
|
assert len(cs.operations) == 0
|
|
|
|
cs = delete_scada_device_data(p, ChangeSet({'device_id': 'sd', 'time': '2023-02-11 00:02:22'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['time'] == '2023-02-11 00:02:22'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['time'] == '2023-02-11 00:02:22'
|
|
assert cs['value'] == 100.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['time'] == '2023-02-11 00:02:22'
|
|
|
|
cs = set_scada_device_data(p, ChangeSet({'device_id': 'sd', 'data': []})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['data'] == []
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert len(cs['data']) == 2
|
|
assert cs['data'][0]['time'] == '2023-02-10 00:02:22'
|
|
assert cs['data'][0]['value'] == 100.0
|
|
assert cs['data'][1]['time'] == '2023-02-10 00:03:22'
|
|
assert cs['data'][1]['value'] == 200.0
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd'
|
|
assert cs['data'] == []
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'sd0'}))
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd0', 'time': '2023-02-10 00:02:22', 'value': 100.0}))
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd0', 'time': '2023-02-11 00:02:22', 'value': 200.0}))
|
|
add_scada_device_data(p, ChangeSet({'device_id': 'sd0', 'time': '2023-02-12 00:02:22', 'value': 300.0}))
|
|
|
|
add_scada_device(p, ChangeSet({'id': 'sd1'}))
|
|
set_scada_device_data(p, ChangeSet({'device_id': 'sd1', 'data': [{'time': '2023-02-10 00:02:22', 'value': 100.0}, {'time': '2023-02-11 00:02:22', 'value': 200.0}, {'time': '2023-02-12 00:02:22', 'value': 300.0}]}))
|
|
|
|
css = clean_scada_device_data(p).operations
|
|
cs = css[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['data'] == []
|
|
cs = css[1]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['data'] == []
|
|
|
|
css = execute_undo(p).operations
|
|
cs = css[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['data'][0] == {'time': '2023-02-10 00:02:22', 'value': 100.0}
|
|
assert cs['data'][1] == {'time': '2023-02-11 00:02:22', 'value': 200.0}
|
|
assert cs['data'][2] == {'time': '2023-02-12 00:02:22', 'value': 300.0}
|
|
cs = css[1]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['data'][0] == {'time': '2023-02-10 00:02:22', 'value': 100.0}
|
|
assert cs['data'][1] == {'time': '2023-02-11 00:02:22', 'value': 200.0}
|
|
assert cs['data'][2] == {'time': '2023-02-12 00:02:22', 'value': 300.0}
|
|
|
|
css = execute_redo(p).operations
|
|
cs = css[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['data'] == []
|
|
cs = css[1]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_device_data'
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['data'] == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 31 scada_element
|
|
|
|
|
|
def test_scada_element(self):
|
|
p = 'test_scada_element'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
add_scada_device(p, ChangeSet({'id': 'sd0', 'name': 'device0', 'address': 'x0', 'sd_type': SCADA_DEVICE_TYPE_PRESSURE}))
|
|
add_scada_device(p, ChangeSet({'id': 'sd1', 'name': 'device1', 'address': 'x1', 'sd_type': SCADA_DEVICE_TYPE_FLOW}))
|
|
|
|
assert get_all_scada_element_ids(p) == []
|
|
|
|
add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j0', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm == {}
|
|
add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j0', 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm == {}
|
|
add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm == {}
|
|
add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm == {}
|
|
|
|
add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm['id'] == 'sm0'
|
|
assert sm['x'] == 0.0
|
|
assert sm['y'] == 1.0
|
|
assert sm['device_id'] == 'sd0'
|
|
assert sm['model_id'] == 'j1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p0', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm == {}
|
|
add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p0', 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm == {}
|
|
add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm == {}
|
|
add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p0', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm == {}
|
|
|
|
add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm['id'] == 'sm1'
|
|
assert sm['x'] == 1.0
|
|
assert sm['y'] == 2.0
|
|
assert sm['device_id'] == 'sd1'
|
|
assert sm['model_id'] == 'p1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
elements = get_all_scada_element_ids(p)
|
|
assert len(elements) == 2
|
|
assert elements[0] == 'sm0'
|
|
assert elements[1] == 'sm1'
|
|
|
|
set_scada_element(p, ChangeSet({'id': 'sm0', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm['id'] == 'sm0'
|
|
assert sm['x'] == 1.0
|
|
assert sm['y'] == 2.0
|
|
assert sm['device_id'] == 'sd1'
|
|
assert sm['model_id'] == 'p1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
set_scada_element(p, ChangeSet({'id': 'sm0', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm['id'] == 'sm0'
|
|
assert sm['x'] == 1.0
|
|
assert sm['y'] == 2.0
|
|
assert sm['device_id'] == 'sd1'
|
|
assert sm['model_id'] == 'p1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
set_scada_element(p, ChangeSet({'id': 'sm1', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm['id'] == 'sm1'
|
|
assert sm['x'] == 0.0
|
|
assert sm['y'] == 1.0
|
|
assert sm['device_id'] == 'sd0'
|
|
assert sm['model_id'] == 'j1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
set_scada_element(p, ChangeSet({'id': 'sm1', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm['id'] == 'sm1'
|
|
assert sm['x'] == 0.0
|
|
assert sm['y'] == 1.0
|
|
assert sm['device_id'] == 'sd0'
|
|
assert sm['model_id'] == 'j1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
delete_scada_element(p, ChangeSet({'id': 'sm0'}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm == {}
|
|
|
|
delete_scada_element(p, ChangeSet({'id': 'sm1'}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm == {}
|
|
|
|
assert get_all_scada_element_ids(p) == []
|
|
|
|
add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE}))
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm['id'] == 'sm0'
|
|
assert sm['x'] == 0.0
|
|
assert sm['y'] == 1.0
|
|
assert sm['device_id'] == 'sd0'
|
|
assert sm['model_id'] == 'j1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE}))
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm['id'] == 'sm1'
|
|
assert sm['x'] == 1.0
|
|
assert sm['y'] == 2.0
|
|
assert sm['device_id'] == 'sd1'
|
|
assert sm['model_id'] == 'p1'
|
|
assert sm['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert sm['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
elements = get_all_scada_element_ids(p)
|
|
assert len(elements) == 2
|
|
assert elements[0] == 'sm0'
|
|
assert elements[1] == 'sm1'
|
|
|
|
clean_scada_element(p)
|
|
sm = get_scada_element(p, 'sm0')
|
|
assert sm == {}
|
|
sm = get_scada_element(p, 'sm1')
|
|
assert sm == {}
|
|
|
|
assert get_all_scada_element_ids(p) == []
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_scada_element_op(self):
|
|
p = 'test_scada_element_op'
|
|
self.enter(p)
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
|
add_scada_device(p, ChangeSet({'id': 'sd0', 'name': 'device0', 'address': 'x0', 'sd_type': SCADA_DEVICE_TYPE_PRESSURE}))
|
|
add_scada_device(p, ChangeSet({'id': 'sd1', 'name': 'device1', 'address': 'x1', 'sd_type': SCADA_DEVICE_TYPE_FLOW}))
|
|
|
|
css = add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j0', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE})).operations
|
|
assert len(css) == 0
|
|
cs = add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
css = add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p0', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE})).operations
|
|
assert len(css) == 0
|
|
cs = add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
cs = set_scada_element(p, ChangeSet({'id': 'sm0', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
cs = set_scada_element(p, ChangeSet({'id': 'sm1', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
cs = delete_scada_element(p, ChangeSet({'id': 'sm0'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
|
|
cs = delete_scada_element(p, ChangeSet({'id': 'sm1'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
|
|
cs = add_scada_element(p, ChangeSet({'id': 'sm0', 'x': 0.0, 'y': 1.0, 'device_id': 'sd0', 'model_id': 'j1', 'model_type': SCADA_MODEL_TYPE_JUNCTION, 'status': SCADA_ELEMENT_STATUS_OFFLINE})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
cs = add_scada_element(p, ChangeSet({'id': 'sm1', 'x': 1.0, 'y': 2.0, 'device_id': 'sd1', 'model_id': 'p1', 'model_type': SCADA_MODEL_TYPE_PIPE, 'status': SCADA_ELEMENT_STATUS_ONLINE})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
|
|
css = clean_scada_element(p).operations
|
|
cs = css[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
cs = css[1]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
|
|
css = execute_undo(p).operations
|
|
cs = css[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
assert cs['x'] == 1.0
|
|
assert cs['y'] == 2.0
|
|
assert cs['device_id'] == 'sd1'
|
|
assert cs['model_id'] == 'p1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_PIPE
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_ONLINE
|
|
cs = css[1]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
assert cs['x'] == 0.0
|
|
assert cs['y'] == 1.0
|
|
assert cs['device_id'] == 'sd0'
|
|
assert cs['model_id'] == 'j1'
|
|
assert cs['model_type'] == SCADA_MODEL_TYPE_JUNCTION
|
|
assert cs['status'] == SCADA_ELEMENT_STATUS_OFFLINE
|
|
|
|
css = execute_redo(p).operations
|
|
cs = css[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm0'
|
|
cs = css[1]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'scada_element'
|
|
assert cs['id'] == 'sm1'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 32 region_util
|
|
|
|
|
|
def test_get_nodes_in_boundary(self):
|
|
p = 'test_get_nodes_in_boundary'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
|
|
boundary = calculate_boundary(p, vds[0]['nodes'])
|
|
boundary = inflate_boundary(p, boundary)
|
|
nodes = get_nodes_in_boundary(p, boundary)
|
|
assert nodes == ['10', '101', '103', '105', '107', '109', '111', '115', '117', '119', '120', '257', '259', '261', '263', 'Lake']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_get_nodes_in_region(self):
|
|
p = 'test_get_nodes_in_region'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
|
|
boundary = calculate_boundary(p, vds[0]['nodes'])
|
|
boundary = inflate_boundary(p, boundary)
|
|
|
|
add_region(p, ChangeSet({'id': 'r1', 'boundary': boundary}))
|
|
|
|
nodes = get_nodes_in_region(p, 'r1')
|
|
assert nodes == ['10', '101', '103', '105', '107', '109', '111', '115', '117', '119', '120', '257', '259', '261', '263', 'Lake']
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'r2', 'boundary': boundary, 'nodes': ['10', '101', '103']}))
|
|
nodes = get_nodes_in_region(p, 'r2')
|
|
assert nodes == ['10', '101', '103']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_get_links_on_boundary(self):
|
|
p = 'get_links_on_boundary'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
add_region(p, ChangeSet({'id': 'r', 'boundary': [(24.614,13.087), (24.835,11.069), (26.144,10.747), (27.290,11.543), (25.726,12.987), (24.614,13.087)]}))
|
|
links = get_links_on_region_boundary(p, 'r')
|
|
assert links == ['183', '185', '229', '313', '315']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_calculate_convex_hull(self):
|
|
p = 'test_calculate_convex_hull'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
nodes = ['10', '101', '103', '105', '107', '109', '111', '115', '117', '119', '120', '257', '259', '261', '263', 'Lake']
|
|
ch = calculate_convex_hull(p, nodes)
|
|
assert ch == [(20.21, 17.53), (12.96, 21.31), (8.0, 27.53), (9.0, 27.85), (23.7, 22.76), (20.21, 17.53)]
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_calculate_boundary(self):
|
|
p = 'test_calculate_boundary'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
nodes = ['10', '101', '103', '105', '107', '109', '111', '115', '117', '119', '120', '257', '259', '261', '263', 'Lake']
|
|
b = calculate_boundary(p, nodes)
|
|
assert b == [(23.7, 22.76), (22.08, 23.1), (21.17, 23.32), (20.8, 23.4), (20.32, 21.57), (16.97, 21.28), (13.81, 22.94), (9.0, 27.85), (8.0, 27.53), (9.0, 27.85), (13.81, 22.94), (12.96, 21.31), (17.64, 18.92), (20.21, 17.53), (20.98, 19.18), (21.69, 21.28), (22.08, 23.1), (23.7, 22.76)]
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_inflate_boundary(self):
|
|
p = 'test_inflate_boundary'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
nodes = ['10', '101', '103', '105', '107', '109', '111', '115', '117', '119', '120', '257', '259', '261', '263', 'Lake']
|
|
b = calculate_boundary(p, nodes)
|
|
b = inflate_boundary(p, b)
|
|
assert b == [(20.57, 17.12), (21.44, 18.98), (21.45, 19.01), (22.17, 21.13), (22.18, 21.16), (22.46, 22.5), (24.09, 22.17), (24.29, 23.150000000000002), (22.19, 23.580000000000002), (22.2, 23.59), (21.28, 23.81), (20.71, 23.93), (20.37, 23.72), (19.92, 22.03), (17.06, 21.79), (14.120000000000001, 23.330000000000002), (9.26, 28.3), (8.98, 28.37), (7.37, 27.85), (7.68, 26.900000000000002), (8.85, 27.27), (13.19, 22.84), (12.42, 21.36), (12.55, 20.96), (17.41, 18.47), (20.16, 16.990000000000002), (20.57, 17.12)]
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_inflate_region(self):
|
|
p = 'test_inflate_region'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
|
|
boundary = calculate_boundary(p, vds[0]['nodes'])
|
|
add_region(p, ChangeSet({'id': 'r', 'boundary': boundary}))
|
|
b = inflate_region(p, 'r')
|
|
assert b == [(20.57, 17.12), (21.44, 18.98), (21.45, 19.01), (22.17, 21.13), (22.18, 21.16), (22.46, 22.5), (24.09, 22.17), (24.29, 23.150000000000002), (22.19, 23.580000000000002), (22.2, 23.59), (21.28, 23.81), (20.71, 23.93), (20.37, 23.72), (19.92, 22.03), (17.06, 21.79), (14.120000000000001, 23.330000000000002), (9.26, 28.3), (8.98, 28.37), (7.37, 27.85), (7.68, 26.900000000000002), (8.85, 27.27), (13.19, 22.84), (12.42, 21.36), (12.55, 20.96), (17.41, 18.47), (20.16, 16.990000000000002), (20.57, 17.12)]
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 32 region
|
|
|
|
|
|
def test_region(self):
|
|
p = 'test_region'
|
|
self.enter(p)
|
|
|
|
r = get_region(p, 'r')
|
|
assert r == {}
|
|
|
|
add_region(p, ChangeSet({'id': 'r', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]}))
|
|
r = get_region(p, 'r')
|
|
assert r == { 'id': 'r', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)] }
|
|
|
|
set_region(p, ChangeSet({'id': 'r', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 2.0), (0.0, 0.0)]}))
|
|
r = get_region(p, 'r')
|
|
assert r == { 'id': 'r', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 2.0), (0.0, 0.0)] }
|
|
|
|
delete_region(p, ChangeSet({'id': 'r'}))
|
|
r = get_region(p, 'r')
|
|
assert r == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_region_op(self):
|
|
p = 'test_region_op'
|
|
self.enter(p)
|
|
|
|
cs = add_region(p, ChangeSet({'id': 'r', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
|
|
cs = set_region(p, ChangeSet({'id': 'r', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 2.0), (0.0, 0.0)]})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 2.0), (0.0, 0.0)]
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 2.0), (0.0, 0.0)]
|
|
|
|
cs = delete_region(p, ChangeSet({'id': 'r'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 2.0), (0.0, 0.0)]
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'region'
|
|
assert cs['id'] == 'r'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 33 district_metering_area
|
|
|
|
|
|
def test_calculate_district_metering_area_for_nodes(self):
|
|
p = 'test_calculate_district_metering_area_for_nodes'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
dmas = calculate_district_metering_area_for_nodes(p, get_nodes(p), 3)
|
|
assert len(dmas) == 3
|
|
assert dmas[0] == ['117', '119', '120', '121', '123', '125', '127', '129', '131', '139', '141', '143', '145', '147', '149', '15', '151', '153', '157', '159', '161', '195', '20', '257', '259', '261', '263', '3', '60', '601', '61', 'River']
|
|
assert dmas[1] == ['1', '163', '164', '166', '167', '169', '171', '173', '177', '179', '181', '183', '184', '185', '187', '189', '191', '193', '199', '201', '203', '204', '205', '207', '265', '267', '269', '271', '273', '275', '35', '40']
|
|
assert dmas[2] == ['10', '101', '103', '105', '107', '109', '111', '113', '115', '197', '2', '206', '208', '209', '211', '213', '215', '217', '219', '225', '229', '231', '237', '239', '241', '243', '247', '249', '251', '253', '255', '50', 'Lake']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_calculate_district_metering_area_for_region(self):
|
|
p = 'test_calculate_district_metering_area_for_region'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
add_region(p, ChangeSet({'id': 'r', 'boundary': [(-10000.0, -10000.0), (10000.0, -10000.0), (10000.0, 10000.0), (-10000.0, 10000.0), (-10000.0, -10000.0)]}))
|
|
|
|
nodes = get_nodes_in_region(p, 'r')
|
|
assert len(nodes) == 97
|
|
|
|
dmas = calculate_district_metering_area_for_region(p, 'r', 3)
|
|
assert dmas[0] == ['15', '20', '60', '601', '61', '117', '119', '120', '121', '123', '125', '127', '129', '131', '139', '141', '143', '145', '147', '149', '151', '153', '157', '159', '161', '195', '257', '259', '261', '263', 'River', '3']
|
|
assert dmas[1] == ['50', '171', '173', '184', '199', '201', '203', '205', '206', '207', '208', '209', '211', '213', '215', '217', '219', '225', '229', '231', '237', '239', '241', '243', '247', '249', '251', '253', '255', '273', '275', '2']
|
|
assert dmas[2] == ['10', '35', '40', '101', '103', '105', '107', '109', '111', '113', '115', '163', '164', '166', '167', '169', '177', '179', '181', '183', '185', '187', '189', '191', '193', '197', '204', '265', '267', '269', '271', 'Lake', '1']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_calculate_district_metering_area_for_network(self):
|
|
p = 'test_calculate_district_metering_area_for_region'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
dmas = calculate_district_metering_area_for_network(p, 3)
|
|
assert len(dmas) == 3
|
|
assert dmas[0] == ['117', '119', '120', '121', '123', '125', '127', '129', '131', '139', '141', '143', '145', '147', '149', '15', '151', '153', '157', '159', '161', '195', '20', '257', '259', '261', '263', '3', '60', '601', '61', 'River']
|
|
assert dmas[1] == ['1', '163', '164', '166', '167', '169', '171', '173', '177', '179', '181', '183', '184', '185', '187', '189', '191', '193', '199', '201', '203', '204', '205', '207', '265', '267', '269', '271', '273', '275', '35', '40']
|
|
assert dmas[2] == ['10', '101', '103', '105', '107', '109', '111', '113', '115', '197', '2', '206', '208', '209', '211', '213', '215', '217', '219', '225', '229', '231', '237', '239', '241', '243', '247', '249', '251', '253', '255', '50', 'Lake']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_district_metering_area(self):
|
|
p = 'test_district_metering_area'
|
|
self.enter(p)
|
|
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma == {}
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma == {}
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': '1'}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma == {}
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma['id'] == 'dma'
|
|
assert dma['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert dma['parent'] == None
|
|
assert dma['nodes'] == []
|
|
assert dma['level'] == 1
|
|
|
|
set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': '1'}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma['id'] == 'dma'
|
|
assert dma['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert dma['parent'] == None
|
|
assert dma['nodes'] == []
|
|
assert dma['level'] == 1
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'd0', 'boundary': [(0.0, 0.0), (1.0, 0.0), (2.0, 2.0), (0.0, 0.0)]}))
|
|
set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': 'd0'}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma['id'] == 'dma'
|
|
assert dma['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert dma['parent'] == 'd0'
|
|
assert dma['nodes'] == []
|
|
assert dma['level'] == 2
|
|
|
|
set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'nodes': ['1']}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma['id'] == 'dma'
|
|
assert dma['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert dma['parent'] == 'd0'
|
|
assert dma['nodes'] == []
|
|
assert dma['level'] == 2
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'nodes': ['j0']}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma['id'] == 'dma'
|
|
assert dma['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert dma['parent'] == 'd0'
|
|
assert dma['nodes'] == ['j0']
|
|
assert dma['level'] == 2
|
|
|
|
delete_district_metering_area(p, ChangeSet({'id': 'dma'}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma == {}
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': 'd0', 'nodes': ['j0']}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma['id'] == 'dma'
|
|
assert dma['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert dma['parent'] == 'd0'
|
|
assert dma['nodes'] == ['j0']
|
|
assert dma['level'] == 2
|
|
|
|
delete_district_metering_area(p, ChangeSet({'id': 'd0'}))
|
|
dma = get_district_metering_area(p, 'd0')
|
|
assert dma != {}
|
|
|
|
delete_district_metering_area(p, ChangeSet({'id': 'dma'}))
|
|
dma = get_district_metering_area(p, 'dma')
|
|
assert dma == {}
|
|
|
|
delete_district_metering_area(p, ChangeSet({'id': 'd0'}))
|
|
dma = get_district_metering_area(p, 'd0')
|
|
assert dma == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_district_metering_area_op(self):
|
|
p = 'test_district_metering_area_op'
|
|
self.enter(p)
|
|
|
|
cs = add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': '1'})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == None
|
|
assert cs['nodes'] == []
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == None
|
|
assert cs['nodes'] == []
|
|
|
|
cs = set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': '1'})).operations
|
|
assert len(cs) == 0
|
|
|
|
add_district_metering_area(p, ChangeSet({'id': 'd0', 'boundary': [(0.0, 0.0), (1.0, 0.0), (2.0, 2.0), (0.0, 0.0)]}))
|
|
cs = set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': 'd0'})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == []
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == None
|
|
assert cs['nodes'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == []
|
|
|
|
cs = set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'nodes': ['1']})).operations
|
|
assert len(cs) == 0
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
cs = set_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'nodes': ['j0']})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == []
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = delete_district_metering_area(p, ChangeSet({'id': 'xxx'})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = delete_district_metering_area(p, ChangeSet({'id': 'dma'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
|
|
cs = add_district_metering_area(p, ChangeSet({'id': 'dma', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'parent': 'd0', 'nodes': ['j0']})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['parent'] == 'd0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = delete_district_metering_area(p, ChangeSet({'id': 'd0'})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = delete_district_metering_area(p, ChangeSet({'id': 'dma'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'dma'
|
|
|
|
cs = delete_district_metering_area(p, ChangeSet({'id': 'dma'})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = delete_district_metering_area(p, ChangeSet({'id': 'd0'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'district_metering_area'
|
|
assert cs['id'] == 'd0'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_district_metering_area_gen(self):
|
|
p = 'test_district_metering_area_gen'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
cs = generate_district_metering_area(p, 3).operations
|
|
assert len(cs) == 3
|
|
assert cs[0]['operation'] == API_ADD
|
|
assert cs[0]['type'] == 'district_metering_area'
|
|
assert cs[0]['id'] == 'DMA_1_1'
|
|
assert cs[1]['operation'] == API_ADD
|
|
assert cs[1]['type'] == 'district_metering_area'
|
|
assert cs[1]['id'] == 'DMA_1_2'
|
|
assert cs[2]['operation'] == API_ADD
|
|
assert cs[2]['type'] == 'district_metering_area'
|
|
assert cs[2]['id'] == 'DMA_1_3'
|
|
|
|
dmas = get_all_district_metering_area_ids(p)
|
|
assert len(dmas) == 3
|
|
assert dmas[0] == 'DMA_1_1'
|
|
assert dmas[1] == 'DMA_1_2'
|
|
assert dmas[2] == 'DMA_1_3'
|
|
|
|
cs = generate_district_metering_area(p, 3).operations
|
|
assert len(cs) == 6
|
|
assert cs[0]['operation'] == API_DELETE
|
|
assert cs[0]['type'] == 'district_metering_area'
|
|
assert cs[0]['id'] == 'DMA_1_1'
|
|
assert cs[1]['operation'] == API_DELETE
|
|
assert cs[1]['type'] == 'district_metering_area'
|
|
assert cs[1]['id'] == 'DMA_1_2'
|
|
assert cs[2]['operation'] == API_DELETE
|
|
assert cs[2]['type'] == 'district_metering_area'
|
|
assert cs[2]['id'] == 'DMA_1_3'
|
|
assert cs[3]['operation'] == API_ADD
|
|
assert cs[3]['type'] == 'district_metering_area'
|
|
assert cs[3]['id'] == 'DMA_1_1'
|
|
assert cs[4]['operation'] == API_ADD
|
|
assert cs[4]['type'] == 'district_metering_area'
|
|
assert cs[4]['id'] == 'DMA_1_2'
|
|
assert cs[5]['operation'] == API_ADD
|
|
assert cs[5]['type'] == 'district_metering_area'
|
|
assert cs[5]['id'] == 'DMA_1_3'
|
|
|
|
dmas = get_all_district_metering_area_ids(p)
|
|
assert len(dmas) == 3
|
|
assert dmas[0] == 'DMA_1_1'
|
|
assert dmas[1] == 'DMA_1_2'
|
|
assert dmas[2] == 'DMA_1_3'
|
|
|
|
cs = generate_sub_district_metering_area(p, 'DMA_1_1', 2).operations
|
|
assert len(cs) == 2
|
|
assert cs[0]['operation'] == API_ADD
|
|
assert cs[0]['type'] == 'district_metering_area'
|
|
assert cs[0]['id'] == 'DMA_[DMA_1_1]_2_1'
|
|
assert cs[1]['operation'] == API_ADD
|
|
assert cs[1]['type'] == 'district_metering_area'
|
|
assert cs[1]['id'] == 'DMA_[DMA_1_1]_2_2'
|
|
|
|
cs = generate_sub_district_metering_area(p, 'DMA_1_2', 3).operations
|
|
assert len(cs) == 3
|
|
assert cs[0]['operation'] == API_ADD
|
|
assert cs[0]['type'] == 'district_metering_area'
|
|
assert cs[0]['id'] == 'DMA_[DMA_1_2]_2_1'
|
|
assert cs[1]['operation'] == API_ADD
|
|
assert cs[1]['type'] == 'district_metering_area'
|
|
assert cs[1]['id'] == 'DMA_[DMA_1_2]_2_2'
|
|
assert cs[2]['operation'] == API_ADD
|
|
assert cs[2]['type'] == 'district_metering_area'
|
|
assert cs[2]['id'] == 'DMA_[DMA_1_2]_2_3'
|
|
|
|
cs = generate_sub_district_metering_area(p, 'DMA_1_3', 2).operations
|
|
assert len(cs) == 2
|
|
assert cs[0]['operation'] == API_ADD
|
|
assert cs[0]['type'] == 'district_metering_area'
|
|
assert cs[0]['id'] == 'DMA_[DMA_1_3]_2_1'
|
|
assert cs[1]['operation'] == API_ADD
|
|
assert cs[1]['type'] == 'district_metering_area'
|
|
assert cs[1]['id'] == 'DMA_[DMA_1_3]_2_2'
|
|
|
|
dmas = get_all_district_metering_area_ids(p)
|
|
assert len(dmas) == 10
|
|
|
|
cs = generate_district_metering_area(p, 3).operations
|
|
assert len(cs) == 13
|
|
|
|
dmas = get_all_district_metering_area_ids(p)
|
|
assert len(dmas) == 3
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 34 service_area
|
|
|
|
|
|
def test_calculate_service_area(self):
|
|
p = 'test_calculate_service_area'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
sass = calculate_service_area(p)
|
|
assert len(sass) == 25
|
|
|
|
assert sass[0]['River'] == ['River', '60', '61', '123', '601']
|
|
assert sass[0]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '105', '145', '163', '195', '191', '267', '107', '141', '164', '265', '187', '189', '143', '166', '169', '204', '15', '167', '171', '269', '173', '271', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
|
|
assert sass[0]['1'] == ['185', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
|
|
assert sass[0]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
|
|
|
|
assert sass[1]['River'] == ['River', '60', '61', '123', '601']
|
|
assert sass[1]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '145', '163', '195', '191', '141', '164', '265', '187', '143', '166', '169', '267', '204', '15', '167', '171', '269', '173', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
|
|
assert sass[1]['Lake'] == ['105', '107', 'Lake', '10', '101', '103', '109']
|
|
assert sass[1]['1'] == ['189', '185', '271', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
|
|
assert sass[1]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_service_area(self):
|
|
p = 'test_service_area'
|
|
self.enter(p)
|
|
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa == {}
|
|
|
|
add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa == {}
|
|
|
|
add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0'}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa == {}
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0'}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa == {}
|
|
|
|
add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0', 'nodes' : ['x']}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa == {}
|
|
|
|
add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0', 'time_index' : 0, 'nodes': ['j0']}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa['id'] == 'sa'
|
|
assert sa['time_index'] == 0
|
|
assert sa['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert sa['source'] == 'j0'
|
|
assert sa['nodes'] == ['j0']
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
set_service_area(p, ChangeSet({'id': 'sa', 'source': 'j1', 'time_index' : 1, 'nodes': ['j1']}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa['id'] == 'sa'
|
|
assert sa['time_index'] == 1
|
|
assert sa['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert sa['source'] == 'j1'
|
|
assert sa['nodes'] == ['j1']
|
|
|
|
assert get_all_service_area_ids(p) == ['sa']
|
|
sas = get_all_service_areas(p)
|
|
assert len(sas) == 1
|
|
sa = sas[0]
|
|
assert sa['id'] == 'sa'
|
|
assert sa['time_index'] == 1
|
|
assert sa['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert sa['source'] == 'j1'
|
|
assert sa['nodes'] == ['j1']
|
|
|
|
delete_service_area(p, ChangeSet({'id': 'sa'}))
|
|
sa = get_service_area(p, 'sa')
|
|
assert sa == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_service_area_op(self):
|
|
p = 'test_service_area_op'
|
|
self.enter(p)
|
|
|
|
cs = add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0'})).operations
|
|
assert len(cs) == 0
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
cs = add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0'})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0', 'nodes' : ['x']})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_service_area(p, ChangeSet({'id': 'sa', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'source': 'j0', 'time_index' : 0, 'nodes': ['j0']})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
assert cs['time_index'] == 0
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['source'] == 'j0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
assert cs['time_index'] == 0
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['source'] == 'j0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
cs = set_service_area(p, ChangeSet({'id': 'sa', 'source': 'j1', 'time_index' : 1, 'nodes': ['j1']})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
assert cs['time_index'] == 1
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['source'] == 'j1'
|
|
assert cs['nodes'] == ['j1']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
assert cs['time_index'] == 0
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['source'] == 'j0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
assert cs['time_index'] == 1
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['source'] == 'j1'
|
|
assert cs['nodes'] == ['j1']
|
|
|
|
cs = delete_service_area(p, ChangeSet({'id': 'sa'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
assert cs['time_index'] == 1
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['source'] == 'j1'
|
|
assert cs['nodes'] == ['j1']
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'service_area'
|
|
assert cs['id'] == 'sa'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_service_area_gen(self):
|
|
p = 'test_service_area_gen'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
cs = generate_service_area(p).operations
|
|
assert len(cs) == 78
|
|
|
|
assert len(get_all_service_area_ids(p)) == 78
|
|
assert len(get_all_service_areas(p)) == 78
|
|
|
|
cs = generate_service_area(p).operations
|
|
assert len(cs) == 78 * 2
|
|
|
|
assert len(get_all_service_area_ids(p)) == 78
|
|
assert len(get_all_service_areas(p)) == 78
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 35 virtual_district
|
|
|
|
|
|
def test_calculate_virtual_district(self):
|
|
p = 'test_calculate_virtual_district'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
result = calculate_virtual_district(p, ['107', '139', '267', '211'])
|
|
assert result['isolated_nodes'] == []
|
|
vds = result['virtual_districts']
|
|
assert len(vds) == 4
|
|
assert vds[0]['center'] == '107'
|
|
assert vds[0]['nodes'] == ['10', '101', '103', '105', '107', '109', '111', '115', '117', '119', '120', '257', '259', '261', '263', 'Lake']
|
|
assert vds[1]['center'] == '139'
|
|
assert vds[1]['nodes'] == ['15', '20', '60', '601', '61', '121', '123', '125', '127', '129', '131', '139', '141', '143', '145', '147', '149', '151', '153', 'River', '3']
|
|
assert vds[2]['center'] == '267'
|
|
assert vds[2]['nodes'] == ['35', '40', '113', '157', '159', '161', '163', '164', '166', '167', '169', '171', '173', '177', '179', '181', '183', '184', '185', '187', '189', '191', '193', '195', '197', '204', '265', '267', '269', '271', '1']
|
|
assert vds[3]['center'] == '211'
|
|
assert vds[3]['nodes'] == ['50', '199', '201', '203', '205', '206', '207', '208', '209', '211', '213', '215', '217', '219', '225', '229', '231', '237', '239', '241', '243', '247', '249', '251', '253', '255', '273', '275', '2']
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_virtual_district(self):
|
|
p = 'test_virtual_district'
|
|
self.enter(p)
|
|
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd == {}
|
|
|
|
add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]}))
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd == {}
|
|
|
|
add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'center': 'j0'}))
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd == {}
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'center': 'j0', 'nodes' : ['x']}))
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd == {}
|
|
|
|
add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'center': 'j0', 'nodes': ['j0']}))
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd['id'] == 'vd'
|
|
assert vd['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert vd['center'] == 'j0'
|
|
assert vd['nodes'] == ['j0']
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
set_virtual_district(p, ChangeSet({'id': 'vd', 'center': 'j1', 'nodes': ['j1']}))
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd['id'] == 'vd'
|
|
assert vd['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert vd['center'] == 'j1'
|
|
assert vd['nodes'] == ['j1']
|
|
|
|
assert get_all_virtual_district_ids(p) == ['vd']
|
|
vds = get_all_virtual_districts(p)
|
|
assert len(vds) == 1
|
|
vd = vds[0]
|
|
assert vd['id'] == 'vd'
|
|
assert vd['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert vd['center'] == 'j1'
|
|
assert vd['nodes'] == ['j1']
|
|
|
|
delete_virtual_district(p, ChangeSet({'id': 'vd'}))
|
|
vd = get_virtual_district(p, 'vd')
|
|
assert vd == {}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_virtual_district_op(self):
|
|
p = 'test_virtual_district_op'
|
|
self.enter(p)
|
|
|
|
cs = add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'center': 'j0'})).operations
|
|
assert len(cs) == 0
|
|
|
|
add_junction(p, ChangeSet({'id': 'j0', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
cs = add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'center': 'j0', 'nodes' : ['x']})).operations
|
|
assert len(cs) == 0
|
|
|
|
cs = add_virtual_district(p, ChangeSet({'id': 'vd', 'boundary': [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)], 'center': 'j0', 'nodes': ['j0']})).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['center'] == 'j0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['center'] == 'j0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
add_junction(p, ChangeSet({'id': 'j1', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
|
|
|
cs = set_virtual_district(p, ChangeSet({'id': 'vd', 'center': 'j1', 'nodes': ['j1']})).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['center'] == 'j1'
|
|
assert cs['nodes'] == ['j1']
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['center'] == 'j0'
|
|
assert cs['nodes'] == ['j0']
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_UPDATE
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['center'] == 'j1'
|
|
assert cs['nodes'] == ['j1']
|
|
|
|
cs = delete_virtual_district(p, ChangeSet({'id': 'vd'})).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
|
|
cs = execute_undo(p).operations[0]
|
|
assert cs['operation'] == API_ADD
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
assert cs['boundary'] == [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
|
|
assert cs['center'] == 'j1'
|
|
assert cs['nodes'] == ['j1']
|
|
|
|
cs = execute_redo(p).operations[0]
|
|
assert cs['operation'] == API_DELETE
|
|
assert cs['type'] == 'virtual_district'
|
|
assert cs['id'] == 'vd'
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_virtual_district_gen(self):
|
|
p = 'test_virtual_district_gen'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
cs = generate_virtual_district(p, ['107', '139', '267', '211']).operations
|
|
assert len(cs) == 4
|
|
|
|
assert len(get_all_virtual_district_ids(p)) == 4
|
|
assert len(get_all_virtual_districts(p)) == 4
|
|
|
|
cs = generate_virtual_district(p, ['107', '139', '267', '211']).operations
|
|
assert len(cs) == 8
|
|
|
|
assert len(get_all_virtual_district_ids(p)) == 4
|
|
assert len(get_all_virtual_districts(p)) == 4
|
|
|
|
self.leave(p)
|
|
|
|
|
|
# 36 water_distribution
|
|
|
|
|
|
def test_calculate_demand_to_nodes(self):
|
|
p = 'test_calculate_demand_to_nodes'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
|
|
result = calculate_demand_to_nodes(p, 100.0, vds[0]['nodes'])
|
|
assert result == {'10': 17.357291284684024, '101': 22.112211221122113, '103': 6.466202175773133, '105': 8.232489915658233, '107': 4.180418041804181, '109': 7.260726072607261, '111': 3.862608483070529, '115': 6.466202175773133, '117': 5.738907224055739, '119': 0.892311453367559, '120': 3.9665077618873, '257': 2.9275149737195942, '259': 2.1391027991688056, '261': 2.9275149737195942, '263': 5.469991443588803}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_calculate_demand_to_region(self):
|
|
p = 'test_calculate_demand_to_region'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
|
|
nodes = vds[0]['nodes']
|
|
boundary = calculate_boundary(p, nodes)
|
|
boundary = inflate_boundary(p, boundary, 0.1)
|
|
add_region(p, ChangeSet({'id': 'r', 'boundary': boundary}))
|
|
|
|
result = calculate_demand_to_region(p, 100.0, 'r')
|
|
assert result == {'10': 17.357291284684024, '101': 22.112211221122113, '103': 6.466202175773133, '105': 8.232489915658233, '107': 4.180418041804181, '109': 7.260726072607261, '111': 3.862608483070529, '115': 6.466202175773133, '117': 5.738907224055739, '119': 0.892311453367559, '120': 3.9665077618873, '257': 2.9275149737195942, '259': 2.1391027991688056, '261': 2.9275149737195942, '263': 5.469991443588803}
|
|
|
|
self.leave(p)
|
|
|
|
|
|
def test_calculate_demand_to_network(self):
|
|
p = 'test_calculate_demand_to_network'
|
|
read_inp(p, f'./inp/net3.inp', '3')
|
|
open_project(p)
|
|
|
|
result = calculate_demand_to_network(p, 100.0)
|
|
assert result == {'10': 3.2914286561977604, '101': 4.1930946753955975, '103': 1.226173069808884, '105': 1.5611107041895715, '107': 0.7927243664927, '109': 1.3768370575925843, '111': 1.7685634258302052, '113': 1.237762607330707, '115': 1.689754570681808, '117': 1.0882575732991893, '119': 1.9169095061095407, '120': 1.2273320235610663, '121': 1.5020040628282736, '123': 10.894165270513714, '125': 2.0235332513103135, '127': 1.1415694458995753, '129': 2.34804030192136, '131': 1.5020040628282738, '139': 1.1125956020950176, '141': 1.6132636230377755, '143': 0.7069617888312091, '145': 1.323525184992198, '147': 0.713915511344303, '149': 0.4404024258292778, '15': 0.3824547382201623, '151': 1.3096177399660103, '153': 1.3281610000009272, '157': 1.1566358446779454, '159': 1.1380925846430283, '161': 1.0963702495644652, '163': 0.4125875357769024, '164': 0.14834608027933568, '166': 0.11357746771386638, '167': 0.01390744502618772, '169': 0.5947750656199615, '171': 0.482124760907841, '173': 0.9387525392676711, '177': 0.01390744502618772, '179': 0.3314607731241407, '181': 0.07417304013966784, '183': 0.4798068534034764, '184': 1.0731679954457753, '185': 0.44849192301951035, '187': 0.7324355923041763, '189': 0.8636523361262574, '191': 0.9804748743462343, '193': 0.859943684119274, '195': 0.6165633961609889, '197': 0.9132555567196603, '199': 1.241239468587254, '20': 0.2049030233858324, '201': 0.24338028795828512, '203': 0.02781489005237544, '204': 0.3302786402969147, '205': 1.4776660340324455, '206': 0.2225191204190035, '207': 0.713915511344303, '208': 0.32334809685886445, '209': 0.48560162216438785, '211': 0.9920644118680574, '213': 1.7326358595125533, '215': 1.3779960113447665, '217': 1.2215372548001548, '219': 0.4751710383947471, '225': 0.3615935706808807, '229': 1.1473642146604868, '231': 0.45430987085546554, '237': 0.7834527364752415, '239': 0.22599598167555046, '241': 0.6211992111697181, '243': 0.5099396509602164, '247': 0.4276539345552724, '249': 0.4380845183249132, '251': 0.5910664136129782, '253': 0.2549698254801082, '255': 1.0465352382206259, '257': 0.5551388472953265, '259': 0.4056338132638085, '261': 0.5551388472953265, '263': 1.0372636082031674, '265': 0.7811348289708769, '267': 0.9225271867371188, '269': 0.5984837176269449, '271': 0.5354366335082272, '273': 0.8344467015712631, '275': 0.9178913717283894, '35': 0.00695372251309386, '40': 0.29877827731259954, '50': 0.23735372844693708, '60': 0.28556620453772114, '601': 0.000463581500872924, '61': 10.546710935609457}
|
|
self.leave(p)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
pytest.main()
|