Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ jobs:
with:
ref: ${{ env.GIT_REF }}
- uses: dsherret/rust-toolchain-file@v1
- uses: actions/setup-dotnet@v3
with:
dotnet-version: "8.x"
- name: Start containers
run: docker compose up -d
- name: Run smoketests
Expand Down
8 changes: 5 additions & 3 deletions crates/bindings-csharp/SpacetimeSharpSATS.sln
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spacetimedb-quickstart-serv
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sdk-tests", "sdk-tests", "{D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "benchmarks-cs", "..\..\modules\benchmarks-cs\benchmarks-cs.csproj", "{50E1AAE1-C42C-4C2F-B708-5190B0362165}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -54,13 +56,12 @@ Global
{2C282EBD-8E37-4F4C-8EE1-E91E21E75FEE}.Release|Any CPU.Build.0 = Release|Any CPU
{5393711C-44B0-4752-B8D0-852C73D6866F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5393711C-44B0-4752-B8D0-852C73D6866F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5393711C-44B0-4752-B8D0-852C73D6866F}.Release|Any CPU.Build.0 = Release|Any CPU
{40F1C615-EDD9-463F-A012-B232F6710FA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40F1C615-EDD9-463F-A012-B232F6710FA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40F1C615-EDD9-463F-A012-B232F6710FA5}.Release|Any CPU.Build.0 = Release|Any CPU
{FDACD960-168E-44F9-B036-2E29EA391BE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDACD960-168E-44F9-B036-2E29EA391BE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDACD960-168E-44F9-B036-2E29EA391BE7}.Release|Any CPU.Build.0 = Release|Any CPU
{50E1AAE1-C42C-4C2F-B708-5190B0362165}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50E1AAE1-C42C-4C2F-B708-5190B0362165}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -69,6 +70,7 @@ Global
{5393711C-44B0-4752-B8D0-852C73D6866F} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC}
{40F1C615-EDD9-463F-A012-B232F6710FA5} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC}
{FDACD960-168E-44F9-B036-2E29EA391BE7} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC}
{50E1AAE1-C42C-4C2F-B708-5190B0362165} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8A5DE392-1C9D-4806-B6C7-EDD4D33C5D1E}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetName>StdbModule</TargetName>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>wasi-wasm</RuntimeIdentifier>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
55 changes: 28 additions & 27 deletions modules/benchmarks-cs/circles.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

using SpacetimeDB;

namespace Benchmarks;

public static partial class circles
{
[SpacetimeDB.Type]
Expand All @@ -14,7 +14,8 @@ public partial struct Vector2(float x, float y)
[SpacetimeDB.Table]
public partial struct Entity(uint id, float x, float y, uint mass)
{
[SpacetimeDB.Column(ColumnAttrs.PrimaryKeyAuto)]
[AutoInc]
[PrimaryKey]
public uint id = id;
public Vector2 position = new(x, y);
public uint mass = mass;
Expand All @@ -23,10 +24,10 @@ public partial struct Entity(uint id, float x, float y, uint mass)
[SpacetimeDB.Table]
public partial struct Circle(uint entity_id, uint player_id, float x, float y, float magnitude)
{
[SpacetimeDB.Column(ColumnAttrs.PrimaryKey)]
[PrimaryKey]
public uint entity_id = entity_id;

[SpacetimeDB.Column(ColumnAttrs.Indexed)]
[Indexed]
public uint player_id = player_id;

public Vector2 direction = new(x, y);
Expand All @@ -37,7 +38,7 @@ public partial struct Circle(uint entity_id, uint player_id, float x, float y, f
[SpacetimeDB.Table]
public partial struct Food(uint entity_id)
{
[SpacetimeDB.Column(ColumnAttrs.PrimaryKey)]
[PrimaryKey]
public uint entity_id = entity_id;
}

Expand All @@ -59,44 +60,44 @@ public static bool IsOverlapping(Entity entity1, Entity entity2)
}

[SpacetimeDB.Reducer]
public static void insert_bulk_entity(uint count)
public static void insert_bulk_entity(ReducerContext ctx, uint count)
{
for (uint id = 0; id < count; id++)
{
new Entity(0, id, id + 5, id * 5).Insert();
ctx.Db.Entity.Insert(new(0, id, id + 5, id * 5));
}
Log.Info($"INSERT ENTITY: {count}");
}

[SpacetimeDB.Reducer]
public static void insert_bulk_circle(uint count)
public static void insert_bulk_circle(ReducerContext ctx, uint count)
{
for (uint id = 0; id < count; id++)
{
new Circle(id, id, id, id + 5, id * 5).Insert();
ctx.Db.Circle.Insert(new(id, id, id, id + 5, id * 5));
}
Log.Info($"INSERT CIRCLE: {count}");
}

[SpacetimeDB.Reducer]
public static void insert_bulk_food(uint count)
public static void insert_bulk_food(ReducerContext ctx, uint count)
{
for (uint id = 1; id <= count; id++)
{
new Food(id).Insert();
ctx.Db.Food.Insert(new(id));
}
Log.Info($"INSERT FOOD: {count}");
}

[SpacetimeDB.Reducer]
public static void cross_join_all(uint expected)
public static void cross_join_all(ReducerContext ctx, uint expected)
{
uint count = 0;
foreach (Circle circle in Circle.Iter())
foreach (Circle circle in ctx.Db.Circle.Iter())
{
foreach (Entity entity in Entity.Iter())
foreach (Entity entity in ctx.Db.Entity.Iter())
{
foreach (Food food in Food.Iter())
foreach (Food food in ctx.Db.Food.Iter())
{
count++;
}
Expand All @@ -107,21 +108,21 @@ public static void cross_join_all(uint expected)
}

[SpacetimeDB.Reducer]
public static void cross_join_circle_food(uint expected)
public static void cross_join_circle_food(ReducerContext ctx, uint expected)
{
uint count = 0;
foreach (Circle circle in Circle.Iter())
foreach (Circle circle in ctx.Db.Circle.Iter())
{
if (Entity.FindByid(circle.entity_id) is not { } circle_entity)
if (ctx.Db.Entity.FindByid(circle.entity_id) is not { } circle_entity)
{
continue;
}

foreach (Food food in Food.Iter())
foreach (Food food in ctx.Db.Food.Iter())
{
count++;
Entity food_entity =
Entity.FindByid(food.entity_id)
ctx.Db.Entity.FindByid(food.entity_id)
?? throw new Exception($"Entity not found: {food.entity_id}");
Bench.BlackBox(IsOverlapping(circle_entity, food_entity));
}
Expand All @@ -131,21 +132,21 @@ public static void cross_join_circle_food(uint expected)
}

[SpacetimeDB.Reducer]
public static void init_game_circles(uint initial_load)
public static void init_game_circles(ReducerContext ctx, uint initial_load)
{
Load load = new(initial_load);

insert_bulk_food(load.initial_load);
insert_bulk_entity(load.initial_load);
insert_bulk_circle(load.small_table);
insert_bulk_food(ctx, load.initial_load);
insert_bulk_entity(ctx, load.initial_load);
insert_bulk_circle(ctx, load.small_table);
}

[SpacetimeDB.Reducer]
public static void run_game_circles(uint initial_load)
public static void run_game_circles(ReducerContext ctx, uint initial_load)
{
Load load = new(initial_load);

cross_join_circle_food(initial_load * load.small_table);
cross_join_all(initial_load * initial_load * load.small_table);
cross_join_circle_food(ctx, initial_load * load.small_table);
cross_join_all(ctx, initial_load * initial_load * load.small_table);
}
}
Loading