a tool to help your Letta AI agents navigate bluesky
1import { assertEquals } from "@std/assert";
2import { isAgentAwake, isAgentAsleep } from "./sleepWakeHelpers.ts";
3
4// Normal Schedule Tests (wake=8, sleep=22)
5// Agent should be awake from 8am to 10pm
6
7Deno.test("Normal schedule - should be asleep before wake time (7am)", () => {
8 assertEquals(isAgentAwake(7, 8, 22), false);
9 assertEquals(isAgentAsleep(7, 8, 22), true);
10});
11
12Deno.test("Normal schedule - should be awake at wake time (8am)", () => {
13 assertEquals(isAgentAwake(8, 8, 22), true);
14 assertEquals(isAgentAsleep(8, 8, 22), false);
15});
16
17Deno.test("Normal schedule - should be awake during day (12pm)", () => {
18 assertEquals(isAgentAwake(12, 8, 22), true);
19 assertEquals(isAgentAsleep(12, 8, 22), false);
20});
21
22Deno.test("Normal schedule - should be awake before sleep time (9pm)", () => {
23 assertEquals(isAgentAwake(21, 8, 22), true);
24 assertEquals(isAgentAsleep(21, 8, 22), false);
25});
26
27Deno.test("Normal schedule - should be asleep at sleep time (10pm)", () => {
28 assertEquals(isAgentAwake(22, 8, 22), false);
29 assertEquals(isAgentAsleep(22, 8, 22), true);
30});
31
32Deno.test("Normal schedule - should be asleep late night (11pm)", () => {
33 assertEquals(isAgentAwake(23, 8, 22), false);
34 assertEquals(isAgentAsleep(23, 8, 22), true);
35});
36
37Deno.test("Normal schedule - should be asleep at midnight", () => {
38 assertEquals(isAgentAwake(0, 8, 22), false);
39 assertEquals(isAgentAsleep(0, 8, 22), true);
40});
41
42// Cross-Midnight Schedule Tests (wake=9, sleep=2)
43// Agent should be awake from 9am to 2am (next day)
44
45Deno.test("Cross-midnight schedule - should be awake at midnight", () => {
46 assertEquals(isAgentAwake(0, 9, 2), true);
47 assertEquals(isAgentAsleep(0, 9, 2), false);
48});
49
50Deno.test("Cross-midnight schedule - should be awake late night (1am)", () => {
51 assertEquals(isAgentAwake(1, 9, 2), true);
52 assertEquals(isAgentAsleep(1, 9, 2), false);
53});
54
55Deno.test("Cross-midnight schedule - should be asleep at sleep time (2am)", () => {
56 assertEquals(isAgentAwake(2, 9, 2), false);
57 assertEquals(isAgentAsleep(2, 9, 2), true);
58});
59
60Deno.test("Cross-midnight schedule - should be asleep early morning (3am)", () => {
61 assertEquals(isAgentAwake(3, 9, 2), false);
62 assertEquals(isAgentAsleep(3, 9, 2), true);
63});
64
65Deno.test("Cross-midnight schedule - should be asleep before wake (8am)", () => {
66 assertEquals(isAgentAwake(8, 9, 2), false);
67 assertEquals(isAgentAsleep(8, 9, 2), true);
68});
69
70Deno.test("Cross-midnight schedule - should be awake at wake time (9am)", () => {
71 assertEquals(isAgentAwake(9, 9, 2), true);
72 assertEquals(isAgentAsleep(9, 9, 2), false);
73});
74
75Deno.test("Cross-midnight schedule - should be awake during day (12pm)", () => {
76 assertEquals(isAgentAwake(12, 9, 2), true);
77 assertEquals(isAgentAsleep(12, 9, 2), false);
78});
79
80Deno.test("Cross-midnight schedule - should be awake late night (11pm)", () => {
81 assertEquals(isAgentAwake(23, 9, 2), true);
82 assertEquals(isAgentAsleep(23, 9, 2), false);
83});
84
85// Edge Case Tests
86
87Deno.test("Edge case - equal wake/sleep times (midnight) should be asleep", () => {
88 // When wake == sleep, the agent should be asleep at all hours
89 assertEquals(isAgentAwake(0, 0, 0), false);
90 assertEquals(isAgentAsleep(0, 0, 0), true);
91 assertEquals(isAgentAwake(12, 0, 0), false);
92 assertEquals(isAgentAsleep(12, 0, 0), true);
93});
94
95Deno.test("Edge case - nearly 24 hours awake (wake=1, sleep=0)", () => {
96 // Asleep only from midnight to 1am
97 assertEquals(isAgentAwake(0, 1, 0), false);
98 assertEquals(isAgentAsleep(0, 1, 0), true);
99 assertEquals(isAgentAwake(1, 1, 0), true);
100 assertEquals(isAgentAsleep(1, 1, 0), false);
101 assertEquals(isAgentAwake(23, 1, 0), true);
102 assertEquals(isAgentAsleep(23, 1, 0), false);
103});
104
105Deno.test("Edge case - nearly 24 hours asleep (wake=0, sleep=23)", () => {
106 // Awake only from midnight to 11pm
107 assertEquals(isAgentAwake(0, 0, 23), true);
108 assertEquals(isAgentAsleep(0, 0, 23), false);
109 assertEquals(isAgentAwake(22, 0, 23), true);
110 assertEquals(isAgentAsleep(22, 0, 23), false);
111 assertEquals(isAgentAwake(23, 0, 23), false);
112 assertEquals(isAgentAsleep(23, 0, 23), true);
113});
114
115Deno.test("Edge case - adjacent hours (wake=10, sleep=11)", () => {
116 // Awake only from 10am to 11am
117 assertEquals(isAgentAwake(9, 10, 11), false);
118 assertEquals(isAgentAsleep(9, 10, 11), true);
119 assertEquals(isAgentAwake(10, 10, 11), true);
120 assertEquals(isAgentAsleep(10, 10, 11), false);
121 assertEquals(isAgentAwake(11, 10, 11), false);
122 assertEquals(isAgentAsleep(11, 10, 11), true);
123 assertEquals(isAgentAwake(12, 10, 11), false);
124 assertEquals(isAgentAsleep(12, 10, 11), true);
125});
126
127// Inverse Relationship Tests
128
129Deno.test("Inverse relationship - awake and asleep are always opposite (normal schedule)", () => {
130 const wakeTime = 8;
131 const sleepTime = 22;
132
133 // Test all 24 hours
134 for (let hour = 0; hour < 24; hour++) {
135 const awake = isAgentAwake(hour, wakeTime, sleepTime);
136 const asleep = isAgentAsleep(hour, wakeTime, sleepTime);
137 assertEquals(
138 awake,
139 !asleep,
140 `Hour ${hour}: awake=${awake}, asleep=${asleep} should be opposite`,
141 );
142 }
143});
144
145Deno.test("Inverse relationship - awake and asleep are always opposite (cross-midnight)", () => {
146 const wakeTime = 9;
147 const sleepTime = 2;
148
149 // Test all 24 hours
150 for (let hour = 0; hour < 24; hour++) {
151 const awake = isAgentAwake(hour, wakeTime, sleepTime);
152 const asleep = isAgentAsleep(hour, wakeTime, sleepTime);
153 assertEquals(
154 awake,
155 !asleep,
156 `Hour ${hour}: awake=${awake}, asleep=${asleep} should be opposite`,
157 );
158 }
159});
160
161Deno.test("Inverse relationship - awake and asleep are always opposite (edge case)", () => {
162 const wakeTime = 23;
163 const sleepTime = 1;
164
165 // Test all 24 hours
166 for (let hour = 0; hour < 24; hour++) {
167 const awake = isAgentAwake(hour, wakeTime, sleepTime);
168 const asleep = isAgentAsleep(hour, wakeTime, sleepTime);
169 assertEquals(
170 awake,
171 !asleep,
172 `Hour ${hour}: awake=${awake}, asleep=${asleep} should be opposite`,
173 );
174 }
175});