@@ -103,3 +103,54 @@ impl RubyHeapTrigger {
103103 . expect ( "Attempt to use RUBY_HEAP_TRIGGER_CONFIG before it is initialized" )
104104 }
105105}
106+
107+ #[ cfg( test) ]
108+ mod tests {
109+ use super :: * ;
110+
111+ const MIN_HEAP_PAGES : usize = 256 ;
112+ const MAX_HEAP_PAGES : usize = 4096 ;
113+
114+ fn init_config ( ) {
115+ RUBY_HEAP_TRIGGER_CONFIG . get_or_init ( || RubyHeapTriggerConfig {
116+ min_heap_pages : MIN_HEAP_PAGES ,
117+ max_heap_pages : MAX_HEAP_PAGES ,
118+ heap_pages_min_ratio : 0.2 ,
119+ heap_pages_goal_ratio : 0.4 ,
120+ heap_pages_max_ratio : 0.65 ,
121+ } ) ;
122+ }
123+
124+ fn trigger_with_target ( target_heap_pages : usize ) -> RubyHeapTrigger {
125+ init_config ( ) ;
126+
127+ RubyHeapTrigger {
128+ target_heap_pages : AtomicUsize :: new ( target_heap_pages) ,
129+ }
130+ }
131+
132+ #[ test]
133+ fn starts_at_the_min_heap_size ( ) {
134+ init_config ( ) ;
135+
136+ let trigger = RubyHeapTrigger :: default ( ) ;
137+
138+ assert_eq ! ( trigger. get_current_heap_size_in_pages( ) , MIN_HEAP_PAGES ) ;
139+ }
140+
141+ #[ test]
142+ fn reports_the_configured_max_heap_size ( ) {
143+ let trigger = trigger_with_target ( MIN_HEAP_PAGES ) ;
144+
145+ assert_eq ! ( trigger. get_max_heap_size_in_pages( ) , MAX_HEAP_PAGES ) ;
146+ }
147+
148+ #[ test]
149+ fn current_heap_size_tracks_the_target ( ) {
150+ let trigger = trigger_with_target ( 1024 ) ;
151+ assert_eq ! ( trigger. get_current_heap_size_in_pages( ) , 1024 ) ;
152+
153+ trigger. target_heap_pages . store ( 2048 , Ordering :: Relaxed ) ;
154+ assert_eq ! ( trigger. get_current_heap_size_in_pages( ) , 2048 ) ;
155+ }
156+ }
0 commit comments