diff --git a/README.md b/README.md index 03de2fe..3cf7b0c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # nima A multi agent framework written in nim + diff --git a/nima.nimble b/nima.nimble new file mode 100644 index 0000000..53e3839 --- /dev/null +++ b/nima.nimble @@ -0,0 +1,12 @@ +# Package + +version = "0.1.0" +author = "root-11" +description = "A multi agent framework" +license = "MIT" +srcDir = "src" + + +# Dependencies + +requires "nim >= 2.0.2" diff --git a/src/nima.nim b/src/nima.nim new file mode 100644 index 0000000..c07a275 --- /dev/null +++ b/src/nima.nim @@ -0,0 +1,39 @@ +# This is just an example to get you started. A typical library package +# exports the main API in this file. Note that you cannot rename this file +# but you can remove it if you wish. + +type + Sender = int + Receiver = int + Topic = string + Message* = tuple[sender:Sender, receiver:Receiver, topic:Topic] + + +proc copy*(self: Message): Message = + result.sender = self.sender + result.receiver = self.receiver + result.topic = self.topic + +var agent_ids: int = 0 + +type Agent* = object + id*: int + +proc newAgent*(): Agent = + agent_ids += 1 + result.id = agent_ids + +type Scheduler* = object + agents*: seq[Agent] + t*: int = 0 + +proc newScheduler*(): Scheduler = + result.t = 0 + +proc add*(scheduler: var Scheduler, agent: var Agent) = + # Adds agent to the scheduler + scheduler.agents.add(agent) + +proc run*(self: var Scheduler) = + let step: int = 1 + self.t += step \ No newline at end of file diff --git a/tests/config.nims b/tests/config.nims new file mode 100644 index 0000000..3bb69f8 --- /dev/null +++ b/tests/config.nims @@ -0,0 +1 @@ +switch("path", "$projectDir/../src") \ No newline at end of file diff --git a/tests/test1.nim b/tests/test1.nim new file mode 100644 index 0000000..3724ac2 --- /dev/null +++ b/tests/test1.nim @@ -0,0 +1,29 @@ +# This is just an example to get you started. You may wish to put all of your +# tests into a single file, or separate them into multiple `test1`, `test2` +# etc. files (better names are recommended, just make sure the name starts with +# the letter 't'). +# +# To run these tests, simply execute `nimble test`. + +import unittest + +import nima + +test "can create message": + var msg: Message = (sender:1, receiver:2, topic:"hello") + check msg.sender == 1 + check msg.receiver == 2 + check msg.topic == "hello" + msg_copy = msg.copy() + + +test "can create agent": + var agent = newAgent() + check agent.id == 1 + +test "minimal system": + var agent = newAgent() + var s = newScheduler() + s.add(agent) + s.run() + check s.t == 1 \ No newline at end of file