hqmf2js 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +1 -1
  3. data/Gemfile +1 -25
  4. data/Gemfile.lock +170 -146
  5. data/app/assets/javascripts/crosswalk.js.coffee +17 -19
  6. data/app/assets/javascripts/custom_calculations.js.coffee +44 -17
  7. data/app/assets/javascripts/hqmf_util.js.coffee +559 -161
  8. data/app/assets/javascripts/logging_utils.js.coffee +6 -4
  9. data/app/assets/javascripts/patient_api_extension.js.coffee +41 -9
  10. data/app/assets/javascripts/specifics.js.coffee +163 -69
  11. data/hqmf2js.gemspec +7 -12
  12. data/lib/assets/javascripts/libraries/map_reduce_utils.js +151 -64
  13. data/lib/generator/characteristic.js.erb +23 -12
  14. data/lib/generator/codes_to_json.rb +1 -1
  15. data/lib/generator/data_criteria.js.erb +15 -3
  16. data/lib/generator/derived_data.js.erb +5 -0
  17. data/lib/generator/execution.rb +41 -11
  18. data/lib/generator/js.rb +74 -41
  19. data/lib/generator/patient_data.js.erb +1 -1
  20. data/lib/hqmf2js.rb +0 -1
  21. data/lib/hquery/engine.rb +3 -1
  22. data/lib/tasks/convert.rake +20 -12
  23. data/test/fixtures/NQF59New.json +1423 -0
  24. data/test/fixtures/fulfills.xml +917 -0
  25. data/test/fixtures/patients/larry_vanderman.json +573 -654
  26. data/test/{simplecov.rb → simplecov_init.rb} +0 -0
  27. data/test/test_helper.rb +2 -3
  28. data/test/unit/cmd_test.rb +145 -19
  29. data/test/unit/codes_to_json_test.rb +12 -12
  30. data/test/unit/custom_calculations_test.rb +2 -6
  31. data/test/unit/effective_date_test.rb +3 -4
  32. data/test/unit/erb_context_test.rb +12 -12
  33. data/test/unit/filter_by_reference_test.rb +39 -0
  34. data/test/unit/hqmf_from_json_javascript_test.rb +2 -1
  35. data/test/unit/hqmf_javascript_test.rb +12 -13
  36. data/test/unit/js_object_test.rb +2 -2
  37. data/test/unit/library_function_test.rb +210 -42
  38. data/test/unit/specifics_test.rb +402 -321
  39. metadata +57 -15
  40. data/config/warble.rb +0 -144
@@ -1,7 +1,7 @@
1
1
  require_relative '../test_helper'
2
2
  require 'hquery-patient-api'
3
3
 
4
- class JSObjectTest < Test::Unit::TestCase
4
+ class JSObjectTest < Minitest::Test
5
5
 
6
6
  def setup
7
7
  end
@@ -17,7 +17,7 @@ class JSObjectTest < Test::Unit::TestCase
17
17
  criteria = HQMF::DataCriteria.from_json(nil, JSON.parse(File.read(File.join('test','fixtures','json','data_criteria','specific_occurrence.json'))))
18
18
  expected = "hqmfjs.initializeSpecifics = function(patient_api, hqmfjs) { hqmf.SpecificsManager.initialize(patient_api,hqmfjs,{\"id\":\"\",\"type\":\"ENCOUNTER_PERFORMED_INPATIENT_ENCOUNTER\",\"function\":\"OccurrenceAInpatientEncounter1\"}) }"
19
19
  result = js.js_initialize_specifics([criteria])
20
- result.must_equal expected
20
+ assert_equal expected, result
21
21
  end
22
22
 
23
23
  def test_to_js_without_codes
@@ -1,7 +1,7 @@
1
1
  require_relative '../test_helper'
2
2
  require 'hquery-patient-api'
3
3
 
4
- class LibraryFunctionTest < Test::Unit::TestCase
4
+ class LibraryFunctionTest < Minitest::Test
5
5
 
6
6
  def setup
7
7
  @context = get_js_context(HQMF2JS::Generator::JS.library_functions)
@@ -10,57 +10,57 @@ class LibraryFunctionTest < Test::Unit::TestCase
10
10
 
11
11
 
12
12
  def test_library_function_parses
13
- @context.eval('hQuery == undefined').must_equal false
14
- @context.eval('typeof hQuery.Patient').must_equal "function"
15
- @context.eval('typeof allTrue').must_equal "function"
16
- @context.eval('typeof atLeastOneTrue').must_equal "function"
13
+ assert_equal false, @context.eval('hQuery == undefined')
14
+ assert_equal "function", @context.eval('typeof hQuery.Patient')
15
+ assert_equal "function", @context.eval('typeof allTrue')
16
+ assert_equal "function", @context.eval('typeof atLeastOneTrue')
17
17
  end
18
18
 
19
19
  def test_all_true
20
- @context.eval('allTrue(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()').must_equal false
21
- @context.eval('allTrue(1,null,null,new Boolean(false),new Boolean(true),new Boolean(false))().isTrue()').must_equal false
22
- @context.eval('allTrue(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()').must_equal true
23
- @context.eval('allTrue(1,null,null)().isTrue()').must_equal false
20
+ assert_equal false, @context.eval('allTrue(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()')
21
+ assert_equal false, @context.eval('allTrue(1,null,null,new Boolean(false),new Boolean(true),new Boolean(false))().isTrue()')
22
+ assert_equal true, @context.eval('allTrue(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()')
23
+ assert_equal false, @context.eval('allTrue(1,null,null)().isTrue()')
24
24
  end
25
25
 
26
26
  def test_at_least_one_true
27
- @context.eval('atLeastOneTrue(1,null,null,new Boolean(true),new Boolean(false),new Boolean(false))().isTrue()').must_equal true
28
- @context.eval('atLeastOneTrue(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()').must_equal true
29
- @context.eval('atLeastOneTrue(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()').must_equal false
30
- @context.eval('atLeastOneTrue(1,null,null)().isTrue()').must_equal false
27
+ assert_equal true, @context.eval('atLeastOneTrue(1,null,null,new Boolean(true),new Boolean(false),new Boolean(false))().isTrue()')
28
+ assert_equal true, @context.eval('atLeastOneTrue(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()')
29
+ assert_equal false, @context.eval('atLeastOneTrue(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()')
30
+ assert_equal false, @context.eval('atLeastOneTrue(1,null,null)().isTrue()')
31
31
  end
32
32
 
33
33
  def test_all_false
34
- @context.eval('allFalse(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()').must_equal true
35
- @context.eval('allFalse(1,null,null,new Boolean(false),new Boolean(true),new Boolean(false))().isTrue()').must_equal false
36
- @context.eval('allFalse(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()').must_equal false
37
- @context.eval('allFalse(1,null,null)().isTrue()').must_equal false
34
+ assert_equal true, @context.eval('allFalse(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()')
35
+ assert_equal false, @context.eval('allFalse(1,null,null,new Boolean(false),new Boolean(true),new Boolean(false))().isTrue()')
36
+ assert_equal false, @context.eval('allFalse(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()')
37
+ assert_equal false, @context.eval('allFalse(1,null,null)().isTrue()')
38
38
  end
39
39
 
40
40
  def test_at_least_one_false
41
- @context.eval('atLeastOneFalse(1,null,null,new Boolean(true),new Boolean(false),new Boolean(false))().isTrue()').must_equal true
42
- @context.eval('atLeastOneFalse(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()').must_equal false
43
- @context.eval('atLeastOneFalse(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()').must_equal true
44
- @context.eval('atLeastOneFalse(1,null,null)().isTrue()').must_equal false
41
+ assert_equal true, @context.eval('atLeastOneFalse(1,null,null,new Boolean(true),new Boolean(false),new Boolean(false))().isTrue()')
42
+ assert_equal false, @context.eval('atLeastOneFalse(1,null,null,new Boolean(true),new Boolean(true),new Boolean(true))().isTrue()')
43
+ assert_equal true, @context.eval('atLeastOneFalse(1,null,null,new Boolean(false),new Boolean(false),new Boolean(false))().isTrue()')
44
+ assert_equal false, @context.eval('atLeastOneFalse(1,null,null)().isTrue()')
45
45
  end
46
46
 
47
47
  def test_patient_extensions
48
- @context.eval('typeof hQuery.Patient.prototype.procedureResults').must_equal "function"
49
- @context.eval('typeof hQuery.Patient.prototype.laboratoryTests').must_equal "function"
50
- @context.eval('typeof hQuery.Patient.prototype.allMedications').must_equal "function"
51
- @context.eval('typeof hQuery.Patient.prototype.allProblems').must_equal "function"
52
- @context.eval('typeof hQuery.Patient.prototype.allDevices').must_equal "function"
53
- @context.eval('typeof hQuery.Patient.prototype.activeDiagnoses').must_equal "function"
54
- @context.eval('typeof hQuery.Patient.prototype.inactiveDiagnoses').must_equal "function"
55
- @context.eval('typeof hQuery.Patient.prototype.resolvedDiagnoses').must_equal "function"
56
- @context.eval('typeof hQuery.Patient.prototype.getEvents').must_equal "function"
48
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.procedureResults')
49
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.laboratoryTests')
50
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.allMedications')
51
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.allProblems')
52
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.allDevices')
53
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.activeDiagnoses')
54
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.inactiveDiagnoses')
55
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.resolvedDiagnoses')
56
+ assert_equal "function", @context.eval('typeof hQuery.Patient.prototype.getEvents')
57
57
  end
58
58
 
59
59
  def test_code_list
60
- @context.eval('(new CodeList({"foo": [10,11]})).match(10)').must_equal true
61
- @context.eval('(new CodeList({"foo": [10,11]})).match({"code": 10})').must_equal true
62
- @context.eval('(new CodeList({"foo": [10,11]})).match(12)').must_equal false
63
- @context.eval('(new CodeList({"foo": [10,11]})).match({"code": 12})').must_equal false
60
+ assert_equal true, @context.eval('(new CodeList({"foo": [10,11]})).match(10)')
61
+ assert_equal true, @context.eval('(new CodeList({"foo": [10,11]})).match({"code": 10})')
62
+ assert_equal false, @context.eval('(new CodeList({"foo": [10,11]})).match(12)')
63
+ assert_equal false, @context.eval('(new CodeList({"foo": [10,11]})).match({"code": 12})')
64
64
  end
65
65
 
66
66
  def test_pq
@@ -86,6 +86,7 @@ class LibraryFunctionTest < Test::Unit::TestCase
86
86
  ts = 'new TS("20110101")'
87
87
  ts2 = 'new TS("20100101")'
88
88
  ts3 = 'new TS("20120101")'
89
+ ts4 = '(function(){var ts=new TS();ts.date=null;return ts;})()' # set up a null date
89
90
  assert_equal 2011, @context.eval("#{ts}.asDate().getUTCFullYear()")
90
91
  assert_equal 0, @context.eval("#{ts}.asDate().getUTCMonth()")
91
92
  assert_equal 1, @context.eval("#{ts}.asDate().getUTCDate()")
@@ -101,6 +102,9 @@ class LibraryFunctionTest < Test::Unit::TestCase
101
102
  assert !@context.eval("#{ts}.after(#{ts3})")
102
103
  assert @context.eval("#{ts}.beforeOrConcurrent(#{ts})")
103
104
  assert @context.eval("#{ts}.afterOrConcurrent(#{ts})")
105
+ assert @context.eval("#{ts4}.equals(#{ts4})")
106
+ assert !@context.eval("#{ts3}.equals(#{ts4})")
107
+ assert !@context.eval("#{ts4}.equals(#{ts3})")
104
108
 
105
109
  # The following tests are taken from the Joint Commission guidance on time difference
106
110
  # calculations
@@ -269,8 +273,40 @@ class LibraryFunctionTest < Test::Unit::TestCase
269
273
  ivl1 = 'new IVL_TS(new TS("20120310"), new TS("20120320"))'
270
274
  ivl2 = 'new IVL_TS(new TS("20120312"), new TS("20120320"))'
271
275
  assert @context.eval("#{ivl2}.DURING(#{ivl1})")
276
+ assert !@context.eval("#{ivl1}.equals(#{ivl2})")
272
277
  assert_equal 2010, @context.eval('getIVL(new Date(Date.UTC(2010,1,1))).low.asDate().getUTCFullYear()')
273
278
  end
279
+
280
+ def test_ivl_ts_null
281
+ ts1 = 'new TS("20120310")'
282
+ ts2 = 'new TS("20120320")'
283
+ null_ts = '(function(){var ts=new TS();ts.date=null;return ts;})()'
284
+ ivl = "new IVL_TS(#{ts1}, #{ts2})"
285
+ ivl_null_low = "new IVL_TS(#{null_ts}, #{ts2})"
286
+ ivl_null_high = "new IVL_TS(#{ts1}, #{null_ts})"
287
+ ivl_null_both = "new IVL_TS(#{null_ts}, #{null_ts})"
288
+
289
+ assert @context.eval("#{ivl}.equals(#{ivl})")
290
+ assert @context.eval("#{ivl_null_low}.equals(#{ivl_null_low})")
291
+ assert @context.eval("#{ivl_null_high}.equals(#{ivl_null_high})")
292
+ assert @context.eval("#{ivl_null_both}.equals(#{ivl_null_both})")
293
+
294
+ assert !@context.eval("#{ivl}.equals(#{ivl_null_low})")
295
+ assert !@context.eval("#{ivl}.equals(#{ivl_null_high})")
296
+ assert !@context.eval("#{ivl}.equals(#{ivl_null_both})")
297
+
298
+ assert !@context.eval("#{ivl_null_low}.equals(#{ivl})")
299
+ assert !@context.eval("#{ivl_null_low}.equals(#{ivl_null_high})")
300
+ assert !@context.eval("#{ivl_null_low}.equals(#{ivl_null_both})")
301
+
302
+ assert !@context.eval("#{ivl_null_high}.equals(#{ivl})")
303
+ assert !@context.eval("#{ivl_null_high}.equals(#{ivl_null_low})")
304
+ assert !@context.eval("#{ivl_null_high}.equals(#{ivl_null_both})")
305
+
306
+ assert !@context.eval("#{ivl_null_both}.equals(#{ivl})")
307
+ assert !@context.eval("#{ivl_null_both}.equals(#{ivl_null_low})")
308
+ assert !@context.eval("#{ivl_null_both}.equals(#{ivl_null_high})")
309
+ end
274
310
 
275
311
  def test_any_non_null
276
312
  # ANYNonNull
@@ -340,12 +376,33 @@ class LibraryFunctionTest < Test::Unit::TestCase
340
376
  assert_equal 2, @context.eval("XPRODUCT(#{events0},#{events2}).length")
341
377
  assert_equal 2, @context.eval("XPRODUCT(#{events0},#{events2}).eventLists.length")
342
378
  end
379
+
380
+ def test_intersection
381
+ # XPRODUCT
382
+ events0 = '[]'
383
+ events1 = '[{id:1}]'
384
+ events2 = '[{id:2},{id:3},{id:4}]'
385
+ events3 = '[{id:3},{id:5}]'
386
+ assert_equal 0, @context.eval("INTERSECT().length")
387
+ assert_equal 0, @context.eval("INTERSECT(#{events0}).length")
388
+ assert_equal 3, @context.eval("INTERSECT(#{events2}).length")
389
+ assert_equal 0, @context.eval("INTERSECT(#{events1},#{events2}).length")
390
+ assert_equal 0, @context.eval("INTERSECT(#{events0},#{events2}).length")
391
+ assert_equal 1, @context.eval("INTERSECT(#{events2},#{events3}).length")
392
+ assert_equal 0, @context.eval("INTERSECT(#{events2},#{events3},#{events1}).length")
393
+ end
343
394
 
344
395
  def test_temporal_operators
345
396
  # Events and bounds for temporal operators
346
397
  @context.eval('var events1 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120105"), new TS("20120105"));}}]')
347
398
  @context.eval('var events2 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120102"), new TS("20120105"));}}]')
348
399
  @context.eval('var events3 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120105203030"), new TS("20120105203030"));}}]')
400
+ @context.eval('var nullEndEvent = new IVL_TS(new TS("20110101"), new TS("20120105"));')
401
+ @context.eval('nullEndEvent.high.date = null;')
402
+ @context.eval('var events4 = [{"asIVL_TS": function() {return nullEndEvent;}}]')
403
+ @context.eval('var events5 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20140101"), new TS("20140201"));}}]')
404
+ @context.eval('var events6 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20101101"), new TS("20110101"));}}]')
405
+ @context.eval('var events7 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20110101"), new TS("20110201"));}}]')
349
406
  @context.eval('var bound1 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120105"), new TS("20120105"));}}]')
350
407
  @context.eval('var bound2 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120107"), new TS("20120107"));}}]')
351
408
  @context.eval('var bound3 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120103"), new TS("20120107"));}}]')
@@ -353,8 +410,11 @@ class LibraryFunctionTest < Test::Unit::TestCase
353
410
  @context.eval('var bound5 = {"asIVL_TS": function() {return new IVL_TS(new TS("20120106"), new TS("20120107"));}}')
354
411
  @context.eval('var nullStartBound = new IVL_TS(new TS("20120105"), new TS("20120105"));')
355
412
  @context.eval('nullStartBound.low.date = null;')
413
+ @context.eval('var nullEndBound = new IVL_TS(new TS("20140601"), new TS("20140601"));')
414
+ @context.eval('nullEndBound.high.date = null;')
356
415
  @context.eval('var bound6 = {"asIVL_TS": function() {return nullStartBound;}}')
357
416
  @context.eval('var bound7 = [{"asIVL_TS": function() {return new IVL_TS(new TS("20120105193030"), new TS("20120105193030"));}}]')
417
+ @context.eval('var bound8 = {"asIVL_TS": function() {return nullEndBound;}}')
358
418
  @context.eval('var range1 = new IVL_PQ(null, new PQ(1, "d"))')
359
419
  @context.eval('var range2 = new IVL_PQ(new PQ(1, "d"), null)')
360
420
  @context.eval('var range3 = new IVL_PQ(new PQ(0, "d"), null)')
@@ -415,7 +475,18 @@ class LibraryFunctionTest < Test::Unit::TestCase
415
475
  assert_equal 0, @context.eval('OVERLAP(events2, XPRODUCT(bound6))').count
416
476
  assert_equal 1, @context.eval('OVERLAP(events2, XPRODUCT(bound1))').count
417
477
  assert_equal 0, @context.eval('OVERLAP(events2, XPRODUCT(bound2))').count
478
+ ## Overlap with null ending
479
+ assert_equal 1, @context.eval('OVERLAP(events4, bound8)').count
480
+ assert_equal 1, @context.eval('OVERLAP(events4, bound1)').count
481
+ assert_equal 0, @context.eval('OVERLAP(events5, bound8)').count
482
+ assert_equal 1, @context.eval('OVERLAP(events6, events4)').count
483
+ assert_equal 1, @context.eval('OVERLAP(events4, events7)').count
418
484
 
485
+ # SCW
486
+ assert_equal 1, @context.eval('SCW(events1, bound1)').count
487
+ assert_equal 0, @context.eval('SCW(events1, bound6)').count
488
+ assert_equal 0, @context.eval('SCW(events1, bound2)').count
489
+
419
490
  # SBS
420
491
  assert_equal 0, @context.eval('SBS(events1, bound1)').count
421
492
  assert_equal 0, @context.eval('SBS(events2, bound1, range1)').count
@@ -423,12 +494,38 @@ class LibraryFunctionTest < Test::Unit::TestCase
423
494
  assert_equal 1, @context.eval('SBS(events2, bound1, range2)').count
424
495
  assert_equal 0, @context.eval('SBS(events3, bound7, range3)').count
425
496
 
497
+ #SBCW
498
+ assert_equal 1, @context.eval('SBCW(events1, bound1)').count
499
+ assert_equal 0, @context.eval('SBCW(events2, bound1, range1)').count
500
+ assert_equal 1, @context.eval('SBCW(events2, bound1)').count
501
+ assert_equal 1, @context.eval('SBCW(events2, bound1, range2)').count
502
+ assert_equal 0, @context.eval('SBCW(events3, bound7, range3)').count
503
+ assert_equal 0, @context.eval('SBCW(events1, bound6)').count
504
+ assert_equal 1, @context.eval('SBCW(events1, bound2)').count
505
+
426
506
  # SAS
427
507
  assert_equal 0, @context.eval('SAS(events1, bound1)').count
428
508
  assert_equal 0, @context.eval('SAS(events2, bound1, range1)').count
429
509
  assert_equal 0, @context.eval('SAS(events2, bound1)').count
430
510
  assert_equal 0, @context.eval('SAS(events2, bound1, range2)').count
431
511
 
512
+ #SACW
513
+ assert_equal 1, @context.eval('SACW(events1, bound1)').count
514
+ assert_equal 0, @context.eval('SACW(events2, bound1, range1)').count
515
+ assert_equal 0, @context.eval('SACW(events2, bound1)').count
516
+ assert_equal 0, @context.eval('SACW(events2, bound1, range2)').count
517
+ assert_equal 0, @context.eval('SACW(events1, bound6)').count
518
+ assert_equal 0, @context.eval('SACW(events1, bound2)').count
519
+
520
+
521
+ # SBDU
522
+ assert_equal 0, @context.eval('SBDU(events2, bound1, range1)').count
523
+ assert_equal 1, @context.eval('SBDU(events2, bound1)').count
524
+ assert_equal 1, @context.eval('SBDU(events2, bound1, range2)').count
525
+ assert_equal 0, @context.eval('SBDU(events3, bound7, range3)').count
526
+ assert_equal 1, @context.eval('SBDU(events1, bound1)').count
527
+ assert_equal 1, @context.eval('SBDU(events1, bound2)').count
528
+
432
529
  # SBE
433
530
  assert_equal 0, @context.eval('SBE(events1, bound1)').count
434
531
  assert_equal 1, @context.eval('SBE(events1, bound2)').count
@@ -466,10 +563,30 @@ class LibraryFunctionTest < Test::Unit::TestCase
466
563
  assert_equal 1, @context.eval('ECW(events1, bound6)').count
467
564
  assert_equal 0, @context.eval('ECW(events1, bound2)').count
468
565
 
469
- # SCW
470
- assert_equal 1, @context.eval('SCW(events1, bound1)').count
471
- assert_equal 0, @context.eval('SCW(events1, bound6)').count
472
- assert_equal 0, @context.eval('SCW(events1, bound2)').count
566
+ #EBCW
567
+ assert_equal 1, @context.eval('ECW(events1, bound1)').count
568
+ assert_equal 1, @context.eval('ECW(events1, bound6)').count
569
+ assert_equal 0, @context.eval('ECW(events1, bound2)').count
570
+ assert_equal 0, @context.eval('EBE(events1, bound1)').count
571
+ assert_equal 1, @context.eval('EBE(events1, bound2)').count
572
+
573
+ #EBCWS
574
+ assert_equal 0, @context.eval('EBS(events1, bound1)').count
575
+ assert_equal 1, @context.eval('EBS(events1, bound2)').count
576
+
577
+ #EACW
578
+ assert_equal 1, @context.eval('EACW(events1, bound1)').count
579
+ assert_equal 1, @context.eval('EACW(events1, bound6)').count
580
+ assert_equal 0, @context.eval('EACW(events1, bound2)').count
581
+ assert_equal 1, @context.eval('EACW(bound3, events2)').count
582
+
583
+ #EACWS
584
+ assert_equal 1, @context.eval('EACWS(events1, bound1)').count
585
+ assert_equal 1, @context.eval('EACWS(events1, bound3)').count
586
+
587
+ #EBDU
588
+ assert_equal 1, @context.eval('EBDU(events1, bound1)').count
589
+ assert_equal 1, @context.eval('EBDU(events1, bound2)').count
473
590
 
474
591
  # ECWS
475
592
  assert_equal 1, @context.eval('ECWS(events1, bound1)').count
@@ -481,6 +598,17 @@ class LibraryFunctionTest < Test::Unit::TestCase
481
598
  assert_equal 1, @context.eval('SCWE(events1, bound6)').count
482
599
  assert_equal 0, @context.eval('SCWE(events1, bound2)').count
483
600
 
601
+ # SBCWE
602
+ assert_equal 1, @context.eval('SBCWE(events1, bound1)').count
603
+ assert_equal 1, @context.eval('SBCWE(events1, bound6)').count
604
+ assert_equal 1, @context.eval('SBCWE(events1, bound2)').count
605
+
606
+ # SACWE
607
+ assert_equal 1, @context.eval('SACWE(events1, bound1)').count
608
+ assert_equal 1, @context.eval('SACWE(events1, bound6)').count
609
+ assert_equal 0, @context.eval('SACWE(events1, bound2)').count
610
+ assert_equal 1, @context.eval('SACWE(bound2, events1)').count
611
+
484
612
  # CONCURRENT
485
613
  assert_equal 1, @context.eval('CONCURRENT(events1, bound1)').count
486
614
  assert_equal 0, @context.eval('CONCURRENT(events1, bound2)').count
@@ -493,9 +621,28 @@ class LibraryFunctionTest < Test::Unit::TestCase
493
621
  assert_equal true, @context.eval('DATEDIFF([diffEvent1,diffEvent2],range4).isTrue()')
494
622
  assert_equal true, @context.eval('DATEDIFF([diffEvent2,diffEvent1],range4).isTrue()')
495
623
  assert_equal true, @context.eval('DATEDIFF([diffEvent1,diffEvent1],range4).isTrue()')
496
-
497
- # false test
498
-
624
+
625
+ assert_equal true, @context.eval('DATETIMEDIFF([diffEvent1,diffEvent2],range4).isTrue()')
626
+ assert_equal true, @context.eval('DATETIMEDIFF([diffEvent2,diffEvent1],range4).isTrue()')
627
+ assert_equal true, @context.eval('DATETIMEDIFF([diffEvent1,diffEvent1],range4).isTrue()')
628
+
629
+
630
+ @context.eval("
631
+ var ts1 = new TS('20100101100000');
632
+ var ts2 = new TS('20100101101000');
633
+ var ts3 = new TS('20100101103000');
634
+
635
+ var ddEvents1 = [{'id': 1, 'asTS': function() {return ts1;}}];
636
+ var ddEvents2 = [{'id': 20, 'asTS': function() {return ts2;}}];
637
+ var ddEvents3 = [{'id': 30, 'asTS': function() {return ts3;}, 'timeStamp': function() {return ts3.date}}, {'id': 20, 'asTS': function() {return ts2;}, 'timeStamp': function() {return ts2.date}}];
638
+ ");
639
+
640
+ assert_equal 1, @context.eval('DATETIMEDIFF(XPRODUCT(ddEvents1,ddEvents2)).length')
641
+ assert_equal 10, @context.eval('DATETIMEDIFF(XPRODUCT(ddEvents1,ddEvents2))[0]')
642
+ assert_equal 1, @context.eval('DATETIMEDIFF(XPRODUCT(ddEvents1,ddEvents3)).length')
643
+ assert_equal 30, @context.eval('DATETIMEDIFF(XPRODUCT(ddEvents1,ddEvents3))[0]')
644
+ assert_equal 1, @context.eval('DATETIMEDIFF(XPRODUCT(ddEvents2,ddEvents3)).length')
645
+ assert_equal 20, @context.eval('DATETIMEDIFF(XPRODUCT(ddEvents2,ddEvents3))[0]')
499
646
 
500
647
  end
501
648
 
@@ -572,9 +719,30 @@ class LibraryFunctionTest < Test::Unit::TestCase
572
719
  assert !@context.eval("MIN(#{events2},#{between15and25}).isTrue()")
573
720
  assert @context.eval("MAX(#{events2},#{between15and25}).isTrue()")
574
721
  end
722
+
723
+ def test_qdm_functions
724
+ # SUM and MEDIAN
725
+ @context.eval('var medications = [{"cumulativeMedicationDuration": function() { return 30;}}, {"cumulativeMedicationDuration": function() {return 40;}}, {"cumulativeMedicationDuration": function() {return 50;}}];')
726
+ v10 = '{"values": function() {return {"scalar": 10};}}'
727
+ v20 = '{"values": function() {return {"scalar": 20};}}'
728
+ events2 = "[#{v10},#{v20}]"
729
+ moreThan80 = 'new IVL_PQ(new PQ(81,"d"))'
730
+ exactly15 = 'new IVL_PQ(new PQ(15), new PQ(15))'
731
+ exactly30 = 'new IVL_PQ(new PQ(30), new PQ(30))'
732
+ exactly40 = 'new IVL_PQ(new PQ(40,"d"), new PQ(40,"d"))'
733
+ field_method = ['cumulativeMedicationDuration']
734
+ assert_equal true, @context.eval("SUM(medications,#{moreThan80},null,#{field_method}).isTrue()")
735
+ assert_equal true, @context.eval("MEDIAN(medications,#{exactly40},null,#{field_method}).isTrue()")
736
+ assert_equal false, @context.eval("SUM(medications,#{moreThan80},null,null).isTrue()")
737
+ assert_equal false, @context.eval("MEDIAN(medications,#{exactly40},null,null).isTrue()")
738
+ assert_equal true, @context.eval("MEDIAN(#{events2},#{exactly15},null,['result']).isTrue()")
739
+ assert_equal false, @context.eval("MEDIAN(#{events2},#{moreThan80},null,['result']).isTrue()")
740
+ assert_equal true, @context.eval("SUM(#{events2},#{exactly30},null,['result']).isTrue()")
741
+ assert_equal false, @context.eval("SUM(#{events2},#{exactly40},null,['result']).isTrue()")
742
+ end
575
743
 
576
744
  def test_respond_to
577
745
  assert @context.eval("(new hQuery.Allergy({})).respondTo('severity')")
578
746
  assert !@context.eval("(new hQuery.Allergy({})).respondTo('canHasCheeseburger')")
579
747
  end
580
- end
748
+ end
@@ -1,13 +1,13 @@
1
1
  require_relative '../test_helper'
2
2
  require 'hquery-patient-api'
3
3
 
4
- class SpecificsTest < Test::Unit::TestCase
4
+ class SpecificsTest < Minitest::Test
5
5
 
6
6
  def setup
7
7
  @context = get_js_context(HQMF2JS::Generator::JS.library_functions)
8
8
  test_initialize_js =
9
9
  "
10
- hqmf.SpecificsManager.initialize({},hqmfjs, {'id':'OccurrenceAEncounter', 'type':'Encounter', 'function':'SourceOccurrenceAEncounter'},{'id':'OccurrenceBEncounter', 'type':'Encounter', 'function':'SourceOccurrenceBEncounter'})
10
+ hqmf.SpecificsManager.initialize({},hqmfjs, {'id':'OccurrenceAEncounter', 'type':'OccA_Encounter', 'function':'SourceOccurrenceAEncounter'},{'id':'OccurrenceBEncounter', 'type':'OccB_Encounter', 'function':'SourceOccurrenceBEncounter'})
11
11
  hqmfjs.SourceOccurrenceAEncounter = function(patient) {
12
12
  return [{'id':1},{'id':2},{'id':3},{'id':4},{'id':5}]
13
13
  }
@@ -21,15 +21,15 @@ class SpecificsTest < Test::Unit::TestCase
21
21
 
22
22
  def test_specifics_initialized_properly
23
23
 
24
- @context.eval('hqmf.SpecificsManager.keyLookup[0]').must_equal 'OccurrenceAEncounter'
25
- @context.eval('hqmf.SpecificsManager.keyLookup[1]').must_equal 'OccurrenceBEncounter'
26
- @context.eval("hqmf.SpecificsManager.indexLookup['OccurrenceAEncounter']").must_equal 0
27
- @context.eval("hqmf.SpecificsManager.indexLookup['OccurrenceBEncounter']").must_equal 1
28
- @context.eval('hqmf.SpecificsManager.functionLookup[0]').must_equal 'SourceOccurrenceAEncounter'
29
- @context.eval('hqmf.SpecificsManager.functionLookup[1]').must_equal 'SourceOccurrenceBEncounter'
30
- @context.eval("hqmf.SpecificsManager.typeLookup['Encounter'].length").must_equal 2
31
- @context.eval("hqmf.SpecificsManager.typeLookup['Encounter'][0]").must_equal 0
32
- @context.eval("hqmf.SpecificsManager.typeLookup['Encounter'][1]").must_equal 1
24
+ assert_equal 'OccurrenceAEncounter', @context.eval('hqmf.SpecificsManager.keyLookup[0]')
25
+ assert_equal 'OccurrenceBEncounter', @context.eval('hqmf.SpecificsManager.keyLookup[1]')
26
+ assert_equal 0, @context.eval("hqmf.SpecificsManager.indexLookup['OccurrenceAEncounter']")
27
+ assert_equal 1, @context.eval("hqmf.SpecificsManager.indexLookup['OccurrenceBEncounter']")
28
+ assert_equal 'SourceOccurrenceAEncounter', @context.eval('hqmf.SpecificsManager.functionLookup[0]')
29
+ assert_equal 'SourceOccurrenceBEncounter', @context.eval('hqmf.SpecificsManager.functionLookup[1]')
30
+ assert_equal 2, @context.eval("hqmf.SpecificsManager.typeLookup['Encounter'].length")
31
+ assert_equal 0, @context.eval("hqmf.SpecificsManager.typeLookup['Encounter'][0]")
32
+ assert_equal 1, @context.eval("hqmf.SpecificsManager.typeLookup['Encounter'][1]")
33
33
  end
34
34
 
35
35
  def test_specifics_row_union
@@ -43,11 +43,11 @@ class SpecificsTest < Test::Unit::TestCase
43
43
  result.rows.length;
44
44
  "
45
45
 
46
- @context.eval(union_rows).must_equal 2
47
- @context.eval("result.rows[0].values[0].id").must_equal 1
48
- @context.eval("result.rows[0].values[1]").must_equal '*'
49
- @context.eval("result.rows[1].values[0]").must_equal '*'
50
- @context.eval("result.rows[1].values[1].id").must_equal 2
46
+ assert_equal 2, @context.eval(union_rows)
47
+ assert_equal 1, @context.eval("result.rows[0].values[0].id")
48
+ assert_equal '*', @context.eval("result.rows[0].values[1]")
49
+ assert_equal '*', @context.eval("result.rows[1].values[0]")
50
+ assert_equal 2, @context.eval("result.rows[1].values[1].id")
51
51
 
52
52
  end
53
53
 
@@ -61,14 +61,14 @@ class SpecificsTest < Test::Unit::TestCase
61
61
  "
62
62
 
63
63
  @context.eval(rows)
64
- @context.eval("row1.values[0].id").must_equal 1
65
- @context.eval("row1.values[1]").must_equal '*'
66
- @context.eval("row2.values[0]").must_equal '*'
67
- @context.eval("row2.values[1].id").must_equal 2
68
- @context.eval("row3.values[0].id").must_equal 1
69
- @context.eval("row3.values[1].id").must_equal 2
70
- @context.eval("row4.values[0]").must_equal '*'
71
- @context.eval("row4.values[1]").must_equal '*'
64
+ assert_equal 1, @context.eval("row1.values[0].id")
65
+ assert_equal '*', @context.eval("row1.values[1]")
66
+ assert_equal '*', @context.eval("row2.values[0]")
67
+ assert_equal 2, @context.eval("row2.values[1].id")
68
+ assert_equal 1, @context.eval("row3.values[0].id")
69
+ assert_equal 2, @context.eval("row3.values[1].id")
70
+ assert_equal '*', @context.eval("row4.values[0]")
71
+ assert_equal '*', @context.eval("row4.values[1]")
72
72
  end
73
73
 
74
74
 
@@ -77,11 +77,11 @@ class SpecificsTest < Test::Unit::TestCase
77
77
  var row1 = new Row(undefined, {});
78
78
  "
79
79
  @context.eval(rows)
80
- @context.eval("Row.match('*', {'id':1}).id").must_equal 1
81
- @context.eval("Row.match({'id':2}, '*').id").must_equal 2
82
- @context.eval("Row.match({'id':1}, {'id':1}).id").must_equal 1
83
- @context.eval("Row.match('*', '*')").must_equal '*'
84
- @context.eval("typeof(Row.match({'id':3}, {'id':2})) === 'undefined'").must_equal true
80
+ assert_equal 1, @context.eval("Row.match('*', {'id':1}).id")
81
+ assert_equal 2, @context.eval("Row.match({'id':2}, '*').id")
82
+ assert_equal 1, @context.eval("Row.match({'id':1}, {'id':1}).id")
83
+ assert_equal '*', @context.eval("Row.match('*', '*')")
84
+ assert_equal true, @context.eval("typeof(Row.match({'id':3}, {'id':2})) === 'undefined'")
85
85
 
86
86
  end
87
87
 
@@ -98,12 +98,12 @@ class SpecificsTest < Test::Unit::TestCase
98
98
  "
99
99
 
100
100
  @context.eval(rows)
101
- @context.eval("row1.equals(row1)").must_equal true
102
- @context.eval("row1.equals(row2)").must_equal false
103
- @context.eval("row2.equals(row2)").must_equal true
104
- @context.eval("row3.equals(row4)").must_equal false
105
- @context.eval("row4.equals(row5)").must_equal true
106
- @context.eval("row6.equals(row6)").must_equal true
101
+ assert_equal true, @context.eval("row1.equals(row1)")
102
+ assert_equal false, @context.eval("row1.equals(row2)")
103
+ assert_equal true, @context.eval("row2.equals(row2)")
104
+ assert_equal false, @context.eval("row3.equals(row4)")
105
+ assert_equal true, @context.eval("row4.equals(row5)")
106
+ assert_equal true, @context.eval("row6.equals(row6)")
107
107
 
108
108
  end
109
109
 
@@ -120,26 +120,26 @@ class SpecificsTest < Test::Unit::TestCase
120
120
  "
121
121
 
122
122
  @context.eval(rows)
123
- @context.eval("row1.intersect(row2).values[0].id").must_equal 1
124
- @context.eval("row1.intersect(row2).values[1].id").must_equal 2
125
- @context.eval("row2.intersect(row1).values[0].id").must_equal 1
126
- @context.eval("row2.intersect(row1).values[1].id").must_equal 2
127
- @context.eval("row1.intersect(row3).values[0].id").must_equal 1
128
- @context.eval("row1.intersect(row3).values[1].id").must_equal 2
129
- @context.eval("row2.intersect(row3).values[0].id").must_equal 1
130
- @context.eval("row2.intersect(row3).values[1].id").must_equal 2
131
- @context.eval("typeof(row1.intersect(row4)) === 'undefined'").must_equal true
132
- @context.eval("row2.intersect(row4).values[0].id").must_equal 2
133
- @context.eval("row2.intersect(row4).values[1].id").must_equal 2
134
- @context.eval("typeof(row1.intersect(row5)) === 'undefined'").must_equal true
135
- @context.eval("typeof(row2.intersect(row5)) === 'undefined'").must_equal true
136
- @context.eval("typeof(row3.intersect(row4)) === 'undefined'").must_equal true
137
- @context.eval("row1.intersect(row6).values[0].id").must_equal 1
138
- @context.eval("row1.intersect(row6).values[1]").must_equal '*'
139
- @context.eval("row2.intersect(row6).values[0]").must_equal '*'
140
- @context.eval("row2.intersect(row6).values[1].id").must_equal 2
141
- @context.eval("row6.intersect(row6).values[0]").must_equal '*'
142
- @context.eval("row6.intersect(row6).values[1]").must_equal '*'
123
+ assert_equal 1, @context.eval("row1.intersect(row2).values[0].id")
124
+ assert_equal 2, @context.eval("row1.intersect(row2).values[1].id")
125
+ assert_equal 1, @context.eval("row2.intersect(row1).values[0].id")
126
+ assert_equal 2, @context.eval("row2.intersect(row1).values[1].id")
127
+ assert_equal 1, @context.eval("row1.intersect(row3).values[0].id")
128
+ assert_equal 2, @context.eval("row1.intersect(row3).values[1].id")
129
+ assert_equal 1, @context.eval("row2.intersect(row3).values[0].id")
130
+ assert_equal 2, @context.eval("row2.intersect(row3).values[1].id")
131
+ assert_equal true, @context.eval("typeof(row1.intersect(row4)) === 'undefined'")
132
+ assert_equal 2, @context.eval("row2.intersect(row4).values[0].id")
133
+ assert_equal 2, @context.eval("row2.intersect(row4).values[1].id")
134
+ assert_equal true, @context.eval("typeof(row1.intersect(row5)) === 'undefined'")
135
+ assert_equal true, @context.eval("typeof(row2.intersect(row5)) === 'undefined'")
136
+ assert_equal true, @context.eval("typeof(row3.intersect(row4)) === 'undefined'")
137
+ assert_equal 1, @context.eval("row1.intersect(row6).values[0].id")
138
+ assert_equal '*', @context.eval("row1.intersect(row6).values[1]")
139
+ assert_equal '*', @context.eval("row2.intersect(row6).values[0]")
140
+ assert_equal 2, @context.eval("row2.intersect(row6).values[1].id")
141
+ assert_equal '*', @context.eval("row6.intersect(row6).values[0]")
142
+ assert_equal '*', @context.eval("row6.intersect(row6).values[1]")
143
143
 
144
144
  end
145
145
 
@@ -171,34 +171,34 @@ class SpecificsTest < Test::Unit::TestCase
171
171
  "
172
172
 
173
173
  @context.eval(intersect_rows)
174
- @context.eval("specific1.intersect(specific2).rows.length").must_equal 1
175
- @context.eval("specific1.intersect(specific2).rows[0].values[0].id").must_equal 1
176
- @context.eval("specific1.intersect(specific2).rows[0].values[1].id").must_equal 2
174
+ assert_equal 1, @context.eval("specific1.intersect(specific2).rows.length")
175
+ assert_equal 1, @context.eval("specific1.intersect(specific2).rows[0].values[0].id")
176
+ assert_equal 2, @context.eval("specific1.intersect(specific2).rows[0].values[1].id")
177
177
 
178
- @context.eval("specific1.intersect(specific3).rows.length").must_equal 1
179
- @context.eval("specific1.intersect(specific3).rows[0].values[0].id").must_equal 1
180
- @context.eval("specific1.intersect(specific3).rows[0].values[1].id").must_equal 2
178
+ assert_equal 1, @context.eval("specific1.intersect(specific3).rows.length")
179
+ assert_equal 1, @context.eval("specific1.intersect(specific3).rows[0].values[0].id")
180
+ assert_equal 2, @context.eval("specific1.intersect(specific3).rows[0].values[1].id")
181
181
 
182
- @context.eval("specific1.intersect(specific4).rows.length").must_equal 2
183
- @context.eval("specific1.intersect(specific4).rows[0].values[0].id").must_equal 1
184
- @context.eval("specific1.intersect(specific4).rows[0].values[1].id").must_equal 2
185
- @context.eval("specific1.intersect(specific4).rows[1].values[0].id").must_equal 1
186
- @context.eval("specific1.intersect(specific4).rows[1].values[1].id").must_equal 3
182
+ assert_equal 2, @context.eval("specific1.intersect(specific4).rows.length")
183
+ assert_equal 1, @context.eval("specific1.intersect(specific4).rows[0].values[0].id")
184
+ assert_equal 2, @context.eval("specific1.intersect(specific4).rows[0].values[1].id")
185
+ assert_equal 1, @context.eval("specific1.intersect(specific4).rows[1].values[0].id")
186
+ assert_equal 3, @context.eval("specific1.intersect(specific4).rows[1].values[1].id")
187
187
 
188
- @context.eval("specific2.intersect(specific3).rows.length").must_equal 2
189
- @context.eval("specific2.intersect(specific3).rows[0].values[0].id").must_equal 1
190
- @context.eval("specific2.intersect(specific3).rows[0].values[1].id").must_equal 2
191
- @context.eval("specific2.intersect(specific3).rows[1].values[0].id").must_equal 2
192
- @context.eval("specific2.intersect(specific3).rows[1].values[1].id").must_equal 2
188
+ assert_equal 2, @context.eval("specific2.intersect(specific3).rows.length")
189
+ assert_equal 1, @context.eval("specific2.intersect(specific3).rows[0].values[0].id")
190
+ assert_equal 2, @context.eval("specific2.intersect(specific3).rows[0].values[1].id")
191
+ assert_equal 2, @context.eval("specific2.intersect(specific3).rows[1].values[0].id")
192
+ assert_equal 2, @context.eval("specific2.intersect(specific3).rows[1].values[1].id")
193
193
 
194
- @context.eval("specific2.intersect(specific5).rows.length").must_equal 0
194
+ assert_equal 0, @context.eval("specific2.intersect(specific5).rows.length")
195
195
 
196
- @context.eval("specific4.intersect(specific5).rows.length").must_equal 1
197
- @context.eval("specific4.intersect(specific5).rows[0].values[0].id").must_equal 1
198
- @context.eval("specific4.intersect(specific5).rows[0].values[1].id").must_equal 3
196
+ assert_equal 1, @context.eval("specific4.intersect(specific5).rows.length")
197
+ assert_equal 1, @context.eval("specific4.intersect(specific5).rows[0].values[0].id")
198
+ assert_equal 3, @context.eval("specific4.intersect(specific5).rows[0].values[1].id")
199
199
 
200
200
 
201
- @context.eval("allSpecific1.intersect(allSpecific2).rows.length").must_equal 1
201
+ assert_equal 1, @context.eval("allSpecific1.intersect(allSpecific2).rows.length")
202
202
 
203
203
  end
204
204
 
@@ -221,8 +221,31 @@ class SpecificsTest < Test::Unit::TestCase
221
221
  "
222
222
 
223
223
  @context.eval(init_rows)
224
- @context.eval("timediffs.length").must_equal 1
225
- @context.eval("timediffs[0]").must_equal 10
224
+ assert_equal 1, @context.eval("timediffs.length")
225
+ assert_equal 10, @context.eval("timediffs[0]")
226
+ end
227
+
228
+ def test_specifics_datetimediff
229
+ init_rows = "
230
+ var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':20}});
231
+ var row2 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':2},'OccurrenceBEncounter':{'id':20}});
232
+ var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':3},'OccurrenceBEncounter':{'id':30}});
233
+
234
+ var specific = new hqmf.SpecificOccurrence([row1,row2,row3]);
235
+
236
+ var ts1 = new TS('20100101100000');
237
+ var ts2 = new TS('20100101101000');
238
+
239
+ var events1 = [{'id': 1, 'asTS': function() {return ts1;}}];
240
+ events1.specific_occurrence = 'OccurrenceAEncounter';
241
+ var events2 = [{'id': 20, 'asTS': function() {return ts2;}},{'id': 30, 'asTS': function() {return ts2;}}];
242
+ events2.specific_occurrence = 'OccurrenceBEncounter';
243
+ var timediffs = DATETIMEDIFF(XPRODUCT(events1, events2), null, specific);
244
+ "
245
+
246
+ @context.eval(init_rows)
247
+ assert_equal 1, @context.eval("timediffs.length")
248
+ assert_equal 10, @context.eval("timediffs[0]")
226
249
  end
227
250
 
228
251
  def test_specifics_event_counting
@@ -243,22 +266,22 @@ class SpecificsTest < Test::Unit::TestCase
243
266
  "
244
267
 
245
268
  @context.eval(init_rows)
246
- @context.eval("specific.uniqueEvents([0])").must_equal 3
247
- @context.eval("specific.uniqueEvents([1])").must_equal 2
248
- @context.eval('hqmf.SpecificsManager.indexLookup["OccurrenceAEncounter"]').must_equal 0
249
- @context.eval('hqmf.SpecificsManager.indexLookup["OccurrenceBEncounter"]').must_equal 1
250
- @context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceAEncounter")').must_equal 0
251
- @context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceBEncounter")').must_equal 1
252
- assert_raise V8::JSError do
269
+ assert_equal 3, @context.eval("specific.uniqueEvents([0])")
270
+ assert_equal 2, @context.eval("specific.uniqueEvents([1])")
271
+ assert_equal 0, @context.eval('hqmf.SpecificsManager.indexLookup["OccurrenceAEncounter"]')
272
+ assert_equal 1, @context.eval('hqmf.SpecificsManager.indexLookup["OccurrenceBEncounter"]')
273
+ assert_equal 0, @context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceAEncounter")')
274
+ assert_equal 1, @context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceBEncounter")')
275
+ assert_raises V8::JSError do
253
276
  @context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceCEncounter")')
254
277
  end
255
- @context.eval('hqmf.SpecificsManager.validate(pop)').must_equal true
256
- @context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceAEncounter"], pop)').must_equal 3
257
- @context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceBEncounter"], pop)').must_equal 2
278
+ assert_equal true, @context.eval('hqmf.SpecificsManager.validate(pop)')
279
+ assert_equal 3, @context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceAEncounter"], pop)')
280
+ assert_equal 2, @context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceBEncounter"], pop)')
258
281
  # this should be 3 and not 5 because we are doing a multiple encounter episode check. The OccurrenceB rows should be dropped since
259
282
  # we cannot have multiple values defined on a single row for a multi encounter episode check for unique.
260
- @context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceAEncounter", "OccurrenceBEncounter"], pop)').must_equal 3
261
- @context.eval('hqmf.SpecificsManager.countUnique(null, pop)').must_equal 1
283
+ assert_equal 3, @context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceAEncounter", "OccurrenceBEncounter"], pop)')
284
+ assert_equal 1, @context.eval('hqmf.SpecificsManager.countUnique(null, pop)')
262
285
  end
263
286
 
264
287
  def test_specifics_event_exclusion
@@ -285,33 +308,33 @@ class SpecificsTest < Test::Unit::TestCase
285
308
 
286
309
  @context.eval(init_rows)
287
310
  @context.eval('var resultSpecific = specific1.removeMatchingRows(0, specific2)')
288
- @context.eval('resultSpecific.rows.length').must_equal 2
289
- @context.eval('resultSpecific.rows[0].values[0].id').must_equal 2
290
- @context.eval('resultSpecific.rows[1].values[0].id').must_equal 3
311
+ assert_equal 2, @context.eval('resultSpecific.rows.length')
312
+ assert_equal 2, @context.eval('resultSpecific.rows[0].values[0].id')
313
+ assert_equal 3, @context.eval('resultSpecific.rows[1].values[0].id')
291
314
  @context.eval('resultSpecific = specific1.removeMatchingRows(1, specific2)')
292
- @context.eval('resultSpecific.rows.length').must_equal 1
293
- @context.eval('resultSpecific.rows[0].values[0].id').must_equal 3
315
+ assert_equal 1, @context.eval('resultSpecific.rows.length')
316
+ assert_equal 3, @context.eval('resultSpecific.rows[0].values[0].id')
294
317
  @context.eval('var result = hqmf.SpecificsManager.exclude(["OccurrenceAEncounter"], pop1, pop2)')
295
- @context.eval('result.isTrue()').must_equal true
296
- @context.eval('result.specificContext.rows.length').must_equal 2
297
- @context.eval('result.specificContext.rows[0].values[0].id').must_equal 2
298
- @context.eval('result.specificContext.rows[1].values[0].id').must_equal 3
318
+ assert_equal true, @context.eval('result.isTrue()')
319
+ assert_equal 2, @context.eval('result.specificContext.rows.length')
320
+ assert_equal 2, @context.eval('result.specificContext.rows[0].values[0].id')
321
+ assert_equal 3, @context.eval('result.specificContext.rows[1].values[0].id')
299
322
  @context.eval('result = hqmf.SpecificsManager.exclude(["OccurrenceBEncounter"], pop1, pop2)')
300
- @context.eval('result.isTrue()').must_equal true
301
- @context.eval('result.specificContext.rows.length').must_equal 1
302
- @context.eval('result.specificContext.rows[0].values[0].id').must_equal 3
323
+ assert_equal true, @context.eval('result.isTrue()')
324
+ assert_equal 1, @context.eval('result.specificContext.rows.length')
325
+ assert_equal 3, @context.eval('result.specificContext.rows[0].values[0].id')
303
326
  @context.eval('result = hqmf.SpecificsManager.exclude(["OccurrenceAEncounter","OccurrenceBEncounter"], pop1, pop2)')
304
- @context.eval('result.isTrue()').must_equal true
305
- @context.eval('result.specificContext.rows.length').must_equal 1
306
- @context.eval('result.specificContext.rows[0].values[0].id').must_equal 3
327
+ assert_equal true, @context.eval('result.isTrue()')
328
+ assert_equal 1, @context.eval('result.specificContext.rows.length')
329
+ assert_equal 3, @context.eval('result.specificContext.rows[0].values[0].id')
307
330
  @context.eval('result = hqmf.SpecificsManager.exclude(null, pop3, pop3)')
308
- @context.eval('result.isTrue()').must_equal false
331
+ assert_equal false, @context.eval('result.isTrue()')
309
332
  @context.eval('result = hqmf.SpecificsManager.exclude(null, pop3, pop4)')
310
- @context.eval('result.isTrue()').must_equal true
333
+ assert_equal true, @context.eval('result.isTrue()')
311
334
  @context.eval('result = hqmf.SpecificsManager.exclude(null, pop4, pop3)')
312
- @context.eval('result.isTrue()').must_equal false
335
+ assert_equal false, @context.eval('result.isTrue()')
313
336
  @context.eval('result = hqmf.SpecificsManager.exclude(null, pop4, pop4)')
314
- @context.eval('result.isTrue()').must_equal false
337
+ assert_equal false, @context.eval('result.isTrue()')
315
338
  end
316
339
 
317
340
  def test_negation
@@ -337,44 +360,44 @@ class SpecificsTest < Test::Unit::TestCase
337
360
  @context.eval(rows)
338
361
 
339
362
  # has row checks
340
- @context.eval('specific1.hasRow(row1)').must_equal true
341
- @context.eval('specific1.hasRow(row2)').must_equal true
342
- @context.eval('specific1.hasRow(row3)').must_equal true
343
- @context.eval('specific1.hasRow(row4)').must_equal false
344
- @context.eval('specific1.hasRow(row5)').must_equal false
363
+ assert_equal true, @context.eval('specific1.hasRow(row1)')
364
+ assert_equal true, @context.eval('specific1.hasRow(row2)')
365
+ assert_equal true, @context.eval('specific1.hasRow(row3)')
366
+ assert_equal false, @context.eval('specific1.hasRow(row4)')
367
+ assert_equal false, @context.eval('specific1.hasRow(row5)')
345
368
 
346
369
  # cartesian checks
347
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3]]).length').must_equal 3
348
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]]).length').must_equal 6
349
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[0][0]').must_equal 1
350
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[0][1]').must_equal 5
351
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[1][0]').must_equal 1
352
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[1][1]').must_equal 6
353
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[2][0]').must_equal 2
354
- @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[2][1]').must_equal 5
370
+ assert_equal 3, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3]]).length')
371
+ assert_equal 6, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]]).length')
372
+ assert_equal 1, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[0][0]')
373
+ assert_equal 5, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[0][1]')
374
+ assert_equal 1, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[1][0]')
375
+ assert_equal 6, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[1][1]')
376
+ assert_equal 2, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[2][0]')
377
+ assert_equal 5, @context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[2][1]')
355
378
 
356
379
  # specificsWithValue on Row
357
- @context.eval('row1.specificsWithValues()[0]').must_equal 0
358
- @context.eval('row2.specificsWithValues()[0]').must_equal 1
359
- @context.eval('row3.specificsWithValues()[0]').must_equal 0
360
- @context.eval('row3.specificsWithValues()[1]').must_equal 1
380
+ assert_equal 0, @context.eval('row1.specificsWithValues()[0]')
381
+ assert_equal 1, @context.eval('row2.specificsWithValues()[0]')
382
+ assert_equal 0, @context.eval('row3.specificsWithValues()[0]')
383
+ assert_equal 1, @context.eval('row3.specificsWithValues()[1]')
361
384
 
362
385
  # specificsWithValue on Specific
363
- @context.eval('specific1.specificsWithValues()[0]').must_equal 0
364
- @context.eval('specific2.specificsWithValues()[0]').must_equal 1
365
- @context.eval('specific3.specificsWithValues()[0]').must_equal 0
366
- @context.eval('specific3.specificsWithValues()[1]').must_equal 1
367
- @context.eval('specific6.specificsWithValues()[0]').must_equal 0
368
- @context.eval('specific6.specificsWithValues()[1]').must_equal 1
369
-
370
- @context.eval('specific1.negate().rows.length').must_equal 4
371
- @context.eval('specific1.negate().rows[0].values[0].id').must_equal 2
372
- @context.eval('specific1.negate().rows[1].values[0].id').must_equal 3
373
- @context.eval('specific1.negate().rows[2].values[0].id').must_equal 4
374
- @context.eval('specific1.negate().rows[3].values[0].id').must_equal 5
386
+ assert_equal 0, @context.eval('specific1.specificsWithValues()[0]')
387
+ assert_equal 1, @context.eval('specific2.specificsWithValues()[0]')
388
+ assert_equal 0, @context.eval('specific3.specificsWithValues()[0]')
389
+ assert_equal 1, @context.eval('specific3.specificsWithValues()[1]')
390
+ assert_equal 0, @context.eval('specific6.specificsWithValues()[0]')
391
+ assert_equal 1, @context.eval('specific6.specificsWithValues()[1]')
392
+
393
+ assert_equal 4, @context.eval('specific1.negate().rows.length')
394
+ assert_equal 2, @context.eval('specific1.negate().rows[0].values[0].id')
395
+ assert_equal 3, @context.eval('specific1.negate().rows[1].values[0].id')
396
+ assert_equal 4, @context.eval('specific1.negate().rows[2].values[0].id')
397
+ assert_equal 5, @context.eval('specific1.negate().rows[3].values[0].id')
375
398
 
376
399
  # 5*5 values = 25 in the cartesian - 2 in the non-negated = 23 negated - 5 rows with OccurrA and OccurrB equal = 18!
377
- @context.eval('specific5.negate().rows.length').must_equal 18
400
+ assert_equal 18, @context.eval('specific5.negate().rows.length')
378
401
 
379
402
  end
380
403
 
@@ -394,19 +417,19 @@ class SpecificsTest < Test::Unit::TestCase
394
417
 
395
418
  @context.eval(rows)
396
419
 
397
- @context.eval('specific1.hasRows()').must_equal false
398
- @context.eval('specific2.hasRows()').must_equal true
399
- @context.eval('specific1.hasSpecifics()').must_equal false
400
- @context.eval('specific2.hasSpecifics()').must_equal true
401
- @context.eval('row3.hasSpecifics()').must_equal false
402
- @context.eval('row2.hasSpecifics()').must_equal true
420
+ assert_equal false, @context.eval('specific1.hasRows()')
421
+ assert_equal true, @context.eval('specific2.hasRows()')
422
+ assert_equal false, @context.eval('specific1.hasSpecifics()')
423
+ assert_equal true, @context.eval('specific2.hasSpecifics()')
424
+ assert_equal false, @context.eval('row3.hasSpecifics()')
425
+ assert_equal true, @context.eval('row2.hasSpecifics()')
403
426
 
404
- @context.eval('specific1.rows.length').must_equal 0
427
+ assert_equal 0, @context.eval('specific1.rows.length')
405
428
  @context.eval('specific1.addRows([row2])')
406
- @context.eval('specific1.rows.length').must_equal 1
407
- @context.eval('specific2.rows.length').must_equal 1
429
+ assert_equal 1, @context.eval('specific1.rows.length')
430
+ assert_equal 1, @context.eval('specific2.rows.length')
408
431
  @context.eval('specific2.addRows([row3])')
409
- @context.eval('specific2.rows.length').must_equal 2
432
+ assert_equal 2, @context.eval('specific2.rows.length')
410
433
 
411
434
  end
412
435
 
@@ -416,8 +439,8 @@ class SpecificsTest < Test::Unit::TestCase
416
439
  @context.eval("x.specific_occurrence = 'specific_occurrence'")
417
440
  @context.eval('var a = new Boolean(true)')
418
441
  @context.eval("a = hqmf.SpecificsManager.maintainSpecifics(a,x)")
419
- @context.eval("typeof(a.specificContext) != 'undefined'").must_equal true
420
- @context.eval("typeof(a.specific_occurrence) != 'undefined'").must_equal true
442
+ assert_equal true, @context.eval("typeof(a.specificContext) != 'undefined'")
443
+ assert_equal true, @context.eval("typeof(a.specific_occurrence) != 'undefined'")
421
444
 
422
445
  end
423
446
 
@@ -435,8 +458,8 @@ class SpecificsTest < Test::Unit::TestCase
435
458
 
436
459
  @context.eval(rows)
437
460
 
438
- @context.eval('specific1.rows.length').must_equal 6
439
- @context.eval('specific1.compactReusedEvents().rows.length').must_equal 4
461
+ assert_equal 6, @context.eval('specific1.rows.length')
462
+ assert_equal 4, @context.eval('specific1.compactReusedEvents().rows.length')
440
463
 
441
464
  end
442
465
 
@@ -469,11 +492,69 @@ class SpecificsTest < Test::Unit::TestCase
469
492
 
470
493
  @context.eval(rows)
471
494
 
472
- @context.eval('specific1.rows.length').must_equal 6
473
- @context.eval('specific1.compactReusedEvents().rows.length').must_equal 6
495
+ assert_equal 6, @context.eval('specific1.rows.length')
496
+ assert_equal 6, @context.eval('specific1.compactReusedEvents().rows.length')
474
497
 
475
498
  end
476
-
499
+
500
+ def test_remove_duplicate_rows
501
+
502
+ rows = "
503
+ var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1}});
504
+ var row2 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1}});
505
+ var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2}});
506
+ var row4 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2}});
507
+
508
+ var specific = new hqmf.SpecificOccurrence([row1,row2,row3,row4]);
509
+ "
510
+
511
+ @context.eval(rows)
512
+
513
+ assert_equal 4, @context.eval('specific.rows.length')
514
+ assert_equal 2, @context.eval('specific.removeDuplicateRows().rows.length')
515
+
516
+ end
517
+
518
+ def test_remove_duplicate_rows_no_duplicates
519
+
520
+ rows = "
521
+ var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1}});
522
+ var row2 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2}});
523
+ var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':3}});
524
+ var row4 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':4}});
525
+
526
+ var specific = new hqmf.SpecificOccurrence([row1,row2,row3,row4]);
527
+ "
528
+
529
+ @context.eval(rows)
530
+
531
+ assert_equal 4, @context.eval('specific.rows.length')
532
+ assert_equal 4, @context.eval('specific.removeDuplicateRows().rows.length')
533
+
534
+ end
535
+
536
+ def test_remove_duplicate_rows_temp_value
537
+
538
+ rows = "
539
+ var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1},undefined:{'id':1}});
540
+ var row2 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1},undefined:{'id':2}});
541
+ var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2},undefined:{'id':1}});
542
+ var row4 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2},undefined:{'id':2}});
543
+ var row5 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1},undefined:{'id':1}});
544
+ var row6 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':1},undefined:{'id':2}});
545
+ var row7 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2},undefined:{'id':1}});
546
+ var row8 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2},undefined:{'id':2}});
547
+
548
+ var specific = new hqmf.SpecificOccurrence([row1,row2,row3,row4,row5,row6,row7,row8]);
549
+ "
550
+
551
+ @context.eval(rows)
552
+
553
+ assert_equal 8, @context.eval('specific.rows.length')
554
+ assert_equal 4, @context.eval('specific.removeDuplicateRows().rows.length')
555
+
556
+ end
557
+
477
558
  def test_row_build_rows_for_matching
478
559
 
479
560
  events = "
@@ -485,22 +566,22 @@ class SpecificsTest < Test::Unit::TestCase
485
566
 
486
567
  @context.eval(events)
487
568
  @context.eval('var rows = Row.buildRowsForMatching(entryKey,entry,boundsKey,bounds)')
488
- @context.eval('rows.length').must_equal 8
489
- @context.eval('rows[0].values.length').must_equal 2
490
- @context.eval('rows[0].values[0].id').must_equal 3
491
- @context.eval('rows[0].values[1].id').must_equal 1
492
- @context.eval('rows[7].values[0].id').must_equal 3
493
- @context.eval('rows[7].values[1].id').must_equal 8
569
+ assert_equal 8, @context.eval('rows.length')
570
+ assert_equal 2, @context.eval('rows[0].values.length')
571
+ assert_equal 3, @context.eval('rows[0].values[0].id')
572
+ assert_equal 1, @context.eval('rows[0].values[1].id')
573
+ assert_equal 3, @context.eval('rows[7].values[0].id')
574
+ assert_equal 8, @context.eval('rows[7].values[1].id')
494
575
  @context.eval('var specific = new hqmf.SpecificOccurrence(rows)')
495
- @context.eval('specific.rows.length').must_equal 8
496
- @context.eval('specific.compactReusedEvents().rows.length').must_equal 7
576
+ assert_equal 8, @context.eval('specific.rows.length')
577
+ assert_equal 7, @context.eval('specific.compactReusedEvents().rows.length')
497
578
  @context.eval('var rows = Row.buildRowsForMatching(undefined,entry,boundsKey,bounds)')
498
- @context.eval('rows.length').must_equal 8
499
- @context.eval("rows[0].tempValue.id").must_equal 3
500
- @context.eval("rows[5].tempValue.id").must_equal 3
501
- @context.eval("rows[0].tempValue.id").must_equal 3
502
- @context.eval("rows[0].values[1].id").must_equal 1
503
- @context.eval("rows[5].values[1].id").must_equal 6
579
+ assert_equal 8, @context.eval('rows.length')
580
+ assert_equal 3, @context.eval("rows[0].nonSpecificLeftMost.id")
581
+ assert_equal 3, @context.eval("rows[5].nonSpecificLeftMost.id")
582
+ assert_equal 3, @context.eval("rows[0].nonSpecificLeftMost.id")
583
+ assert_equal 1, @context.eval("rows[0].values[1].id")
584
+ assert_equal 6, @context.eval("rows[5].values[1].id")
504
585
  end
505
586
 
506
587
  def test_row_build_for_data_criteria
@@ -512,12 +593,12 @@ class SpecificsTest < Test::Unit::TestCase
512
593
 
513
594
  @context.eval(events)
514
595
  @context.eval('var rows = Row.buildForDataCriteria(entryKey,entries)')
515
- @context.eval('rows.length').must_equal 8
516
- @context.eval('rows[0].values.length').must_equal 2
517
- @context.eval('rows[0].values[0].id').must_equal 1
518
- @context.eval('rows[0].values[1]').must_equal '*'
519
- @context.eval('rows[7].values[0].id').must_equal 8
520
- @context.eval('rows[7].values[1]').must_equal '*'
596
+ assert_equal 8, @context.eval('rows.length')
597
+ assert_equal 2, @context.eval('rows[0].values.length')
598
+ assert_equal 1, @context.eval('rows[0].values[0].id')
599
+ assert_equal '*', @context.eval('rows[0].values[1]')
600
+ assert_equal 8, @context.eval('rows[7].values[0].id')
601
+ assert_equal '*', @context.eval('rows[7].values[1]')
521
602
 
522
603
  end
523
604
 
@@ -538,23 +619,23 @@ class SpecificsTest < Test::Unit::TestCase
538
619
  "
539
620
  @context.eval(rows)
540
621
  @context.eval('var result = specific1.finalizeEvents(specific2,specific3)')
541
- @context.eval('result.rows.length').must_equal 3
542
- @context.eval('result.rows[0].values[0].id').must_equal 1
543
- @context.eval('result.rows[0].values[1].id').must_equal 4
544
- @context.eval('result.rows[1].values[0].id').must_equal 1
545
- @context.eval('result.rows[1].values[1].id').must_equal 5
546
- @context.eval('result.rows[2].values[0].id').must_equal 2
547
- @context.eval('result.rows[2].values[1].id').must_equal 4
622
+ assert_equal 3, @context.eval('result.rows.length')
623
+ assert_equal 1, @context.eval('result.rows[0].values[0].id')
624
+ assert_equal 4, @context.eval('result.rows[0].values[1].id')
625
+ assert_equal 1, @context.eval('result.rows[1].values[0].id')
626
+ assert_equal 5, @context.eval('result.rows[1].values[1].id')
627
+ assert_equal 2, @context.eval('result.rows[2].values[0].id')
628
+ assert_equal 4, @context.eval('result.rows[2].values[1].id')
548
629
 
549
630
  @context.eval('var result = specific2.finalizeEvents(specific1,specific3)')
550
- @context.eval('result.rows.length').must_equal 3
631
+ assert_equal 3, @context.eval('result.rows.length')
551
632
 
552
633
  @context.eval('var result = specific1.finalizeEvents(null,specific3)')
553
- @context.eval('result.rows.length').must_equal 3
634
+ assert_equal 3, @context.eval('result.rows.length')
554
635
 
555
636
  # result if 5 and not 6 becasue the 2/2 row gets dropped
556
637
  @context.eval('var result = specific1.finalizeEvents(specific2, null)')
557
- @context.eval('result.rows.length').must_equal 5
638
+ assert_equal 5, @context.eval('result.rows.length')
558
639
 
559
640
  end
560
641
 
@@ -598,10 +679,10 @@ class SpecificsTest < Test::Unit::TestCase
598
679
  "
599
680
  @context.eval(rows)
600
681
 
601
- @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1, hqmf.SpecificsManager.intersectSpecifics(pop2,pop3)))').must_equal true
602
- @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1, hqmf.SpecificsManager.intersectSpecifics(pop2,pop4)))').must_equal false
603
- @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1, hqmf.SpecificsManager.intersectSpecifics(pop2,pop5)))').must_equal false
604
- @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop3f,hqmf.SpecificsManager.intersectSpecifics(pop1,pop2)))').must_equal false
682
+ assert_equal true, @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1, hqmf.SpecificsManager.intersectSpecifics(pop2,pop3)))')
683
+ assert_equal false, @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1, hqmf.SpecificsManager.intersectSpecifics(pop2,pop4)))')
684
+ assert_equal false, @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1, hqmf.SpecificsManager.intersectSpecifics(pop2,pop5)))')
685
+ assert_equal false, @context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop3f,hqmf.SpecificsManager.intersectSpecifics(pop1,pop2)))')
605
686
 
606
687
  end
607
688
 
@@ -634,62 +715,62 @@ class SpecificsTest < Test::Unit::TestCase
634
715
  @context.eval(rows)
635
716
 
636
717
  # test allValuesAny
637
- @context.eval('row1.allValuesAny([0,1,2])').must_equal false
638
- @context.eval('row1.allValuesAny([1,2])').must_equal true
639
- @context.eval('row1.allValuesAny([2])').must_equal true
640
- @context.eval('row1.allValuesAny([1])').must_equal true
641
- @context.eval('row1.allValuesAny([])').must_equal true
642
- @context.eval('identityRow.allValuesAny([0,1,2])').must_equal true
718
+ assert_equal false, @context.eval('row1.allValuesAny([0,1,2])')
719
+ assert_equal true, @context.eval('row1.allValuesAny([1,2])')
720
+ assert_equal true, @context.eval('row1.allValuesAny([2])')
721
+ assert_equal true, @context.eval('row1.allValuesAny([1])')
722
+ assert_equal true, @context.eval('row1.allValuesAny([])')
723
+ assert_equal true, @context.eval('identityRow.allValuesAny([0,1,2])')
643
724
 
644
725
  # test checkEpisodeOfCare
645
- @context.eval('Row.checkEpisodeOfCare({id: 1}, true) == hqmf.SpecificsManager.any').must_equal true
646
- @context.eval('Row.checkEpisodeOfCare({id: 1}, false) == hqmf.SpecificsManager.any').must_equal false
647
- @context.eval('Row.checkEpisodeOfCare({id: 1}, false).id == 1').must_equal true
726
+ assert_equal true, @context.eval('Row.checkEpisodeOfCare({id: 1}, true) == hqmf.SpecificsManager.any')
727
+ assert_equal false, @context.eval('Row.checkEpisodeOfCare({id: 1}, false) == hqmf.SpecificsManager.any')
728
+ assert_equal true, @context.eval('Row.checkEpisodeOfCare({id: 1}, false).id == 1')
648
729
 
649
730
  # test intersect
650
- @context.eval('row1.intersect(row2,[0,1]).allValuesAny([0,1,2])').must_equal true # this is the critical check. Make sure we drop bad episode of care intersections
651
- @context.eval('row1.intersect(row2,[0]).allValuesAny([2])').must_equal true
652
- @context.eval('row1.intersect(row2,[0]).values[0].id == 1').must_equal true
653
- @context.eval('row1.intersect(row2,[0]).values[1].id == 3').must_equal true
654
- @context.eval('row1.intersect(row2,[1]).allValuesAny([2])').must_equal true
655
- @context.eval('row1.intersect(row2,[1]).values[0].id == 1').must_equal true
656
- @context.eval('row1.intersect(row2,[1]).values[1].id == 3').must_equal true
657
-
658
- @context.eval('identityRow.intersect(row1,[0]).values[0].id == 1').must_equal true
659
- @context.eval('identityRow.intersect(row1,[0]).allValuesAny([1,2])').must_equal true
660
- @context.eval('row1.intersect(identityRow,[0]).values[0].id == 1').must_equal true
661
- @context.eval('row1.intersect(identityRow,[0]).allValuesAny([1,2])').must_equal true
731
+ assert_equal true, @context.eval('row1.intersect(row2,[0,1]).allValuesAny([0,1,2])') # this is the critical check. Make sure we drop bad episode of care intersections
732
+ assert_equal true, @context.eval('row1.intersect(row2,[0]).allValuesAny([2])')
733
+ assert_equal true, @context.eval('row1.intersect(row2,[0]).values[0].id == 1')
734
+ assert_equal true, @context.eval('row1.intersect(row2,[0]).values[1].id == 3')
735
+ assert_equal true, @context.eval('row1.intersect(row2,[1]).allValuesAny([2])')
736
+ assert_equal true, @context.eval('row1.intersect(row2,[1]).values[0].id == 1')
737
+ assert_equal true, @context.eval('row1.intersect(row2,[1]).values[1].id == 3')
738
+
739
+ assert_equal true, @context.eval('identityRow.intersect(row1,[0]).values[0].id == 1')
740
+ assert_equal true, @context.eval('identityRow.intersect(row1,[0]).allValuesAny([1,2])')
741
+ assert_equal true, @context.eval('row1.intersect(identityRow,[0]).values[0].id == 1')
742
+ assert_equal true, @context.eval('row1.intersect(identityRow,[0]).allValuesAny([1,2])')
662
743
 
663
744
  # make sure we drop a bad strggler for encounter 2
664
- @context.eval('row1.intersect(row3,[0,1]).allValuesAny([1,2])').must_equal true
665
- @context.eval('row1.intersect(row3,[0,1]).values[0].id == 1').must_equal true
745
+ assert_equal true, @context.eval('row1.intersect(row3,[0,1]).allValuesAny([1,2])')
746
+ assert_equal true, @context.eval('row1.intersect(row3,[0,1]).values[0].id == 1')
666
747
 
667
748
  # test intersectSpecifics
668
749
 
669
- @context.eval('hqmf.SpecificsManager.intersectSpecifics(pop1,pop2).specificContext.rows[0].values[0].id == 1').must_equal true
670
- @context.eval('hqmf.SpecificsManager.intersectSpecifics(pop1,pop2).specificContext.rows[0].values[1].id == 3').must_equal true
671
- @context.eval('hqmf.SpecificsManager.intersectSpecifics(pop1,pop2).specificContext.rows[0].values[2] == hqmf.SpecificsManager.any').must_equal true
672
- @context.eval("hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,['OccurrenceAEncounter1','OccurrenceAEncounter2','OccurrenceAEncounter3']).specificContext.rows[0].allValuesAny([0,1,2])").must_equal true
750
+ assert_equal true, @context.eval('hqmf.SpecificsManager.intersectSpecifics(pop1,pop2).specificContext.rows[0].values[0].id == 1')
751
+ assert_equal true, @context.eval('hqmf.SpecificsManager.intersectSpecifics(pop1,pop2).specificContext.rows[0].values[1].id == 3')
752
+ assert_equal true, @context.eval('hqmf.SpecificsManager.intersectSpecifics(pop1,pop2).specificContext.rows[0].values[2] == hqmf.SpecificsManager.any')
753
+ assert_equal true, @context.eval("hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,['OccurrenceAEncounter1','OccurrenceAEncounter2','OccurrenceAEncounter3']).specificContext.rows[0].allValuesAny([0,1,2])")
673
754
  @context.eval("result = hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,['OccurrenceAEncounter1']).specificContext.rows[0]")
674
- @context.eval('result.allValuesAny([2])').must_equal true
675
- @context.eval('result.values[0].id == 1').must_equal true
676
- @context.eval('result.values[1].id == 3').must_equal true
755
+ assert_equal true, @context.eval('result.allValuesAny([2])')
756
+ assert_equal true, @context.eval('result.values[0].id == 1')
757
+ assert_equal true, @context.eval('result.values[1].id == 3')
677
758
  @context.eval("result = hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,['OccurrenceAEncounter2']).specificContext.rows[0]")
678
- @context.eval('result.allValuesAny([2])').must_equal true
679
- @context.eval('result.values[0].id == 1').must_equal true
680
- @context.eval('result.values[1].id == 3').must_equal true
759
+ assert_equal true, @context.eval('result.allValuesAny([2])')
760
+ assert_equal true, @context.eval('result.values[0].id == 1')
761
+ assert_equal true, @context.eval('result.values[1].id == 3')
681
762
 
682
763
  @context.eval("result = hqmf.SpecificsManager.intersectSpecifics(pop1,pop4,['OccurrenceAEncounter1']).specificContext.rows[0]")
683
- @context.eval('result.values[0].id == 1').must_equal true
684
- @context.eval('result.allValuesAny([1,2])').must_equal true
764
+ assert_equal true, @context.eval('result.values[0].id == 1')
765
+ assert_equal true, @context.eval('result.allValuesAny([1,2])')
685
766
 
686
767
  @context.eval("result = hqmf.SpecificsManager.intersectSpecifics(pop4,pop1,['OccurrenceAEncounter1']).specificContext.rows[0]")
687
- @context.eval('result.values[0].id == 1').must_equal true
688
- @context.eval('result.allValuesAny([1,2])').must_equal true
768
+ assert_equal true, @context.eval('result.values[0].id == 1')
769
+ assert_equal true, @context.eval('result.allValuesAny([1,2])')
689
770
 
690
771
  @context.eval("result = hqmf.SpecificsManager.intersectSpecifics(pop1,pop3,['OccurrenceAEncounter1','OccurrenceAEncounter2']).specificContext.rows[0]")
691
- @context.eval('result.allValuesAny([1,2])').must_equal true
692
- @context.eval('result.values[0].id == 1').must_equal true
772
+ assert_equal true, @context.eval('result.allValuesAny([1,2])')
773
+ assert_equal true, @context.eval('result.values[0].id == 1')
693
774
 
694
775
  end
695
776
 
@@ -726,20 +807,20 @@ class SpecificsTest < Test::Unit::TestCase
726
807
  assert @context.eval('intersection.isTrue()')
727
808
  @context.eval('var result = intersection.specificContext')
728
809
 
729
- @context.eval('result.rows.length').must_equal 3
810
+ assert_equal 3, @context.eval('result.rows.length')
730
811
 
731
- @context.eval('result.rows[0].values[0].id').must_equal 1
732
- @context.eval('result.rows[0].values[1].id').must_equal 4
733
- @context.eval('result.rows[1].values[0].id').must_equal 1
734
- @context.eval('result.rows[1].values[1].id').must_equal 5
735
- @context.eval('result.rows[2].values[0].id').must_equal 2
736
- @context.eval('result.rows[2].values[1].id').must_equal 4
812
+ assert_equal 1, @context.eval('result.rows[0].values[0].id')
813
+ assert_equal 4, @context.eval('result.rows[0].values[1].id')
814
+ assert_equal 1, @context.eval('result.rows[1].values[0].id')
815
+ assert_equal 5, @context.eval('result.rows[1].values[1].id')
816
+ assert_equal 2, @context.eval('result.rows[2].values[0].id')
817
+ assert_equal 4, @context.eval('result.rows[2].values[1].id')
737
818
 
738
819
  @context.eval('var intersection = hqmf.SpecificsManager.intersectAll(new Boolean(true), [pop1,pop2,pop3], true)')
739
820
  @context.eval('var result = intersection.specificContext')
740
821
 
741
822
  # 5*5 = 25 - 5 equal rows - 3 non-negated = 17
742
- @context.eval('result.rows.length').must_equal 17
823
+ assert_equal 17, @context.eval('result.rows.length')
743
824
 
744
825
  end
745
826
 
@@ -776,7 +857,7 @@ class SpecificsTest < Test::Unit::TestCase
776
857
  assert @context.eval('union.isTrue()')
777
858
  @context.eval('var result = union.specificContext')
778
859
 
779
- @context.eval('result.rows.length').must_equal 8
860
+ assert_equal 8, @context.eval('result.rows.length')
780
861
 
781
862
  @context.eval('var union = hqmf.SpecificsManager.unionAll(new Boolean(true), [pop1,pop2,pop3], true)')
782
863
  assert @context.eval('union.isTrue()')
@@ -785,7 +866,7 @@ class SpecificsTest < Test::Unit::TestCase
785
866
  # originally 5*5, but we remove 1,2 from the left and 2,4,5 from the right
786
867
  # that leaves [3,4,5] x [1,3] which is 6 rows... minus the 3,3 row we get 5 rows
787
868
 
788
- @context.eval('result.rows.length').must_equal 5
869
+ assert_equal 5, @context.eval('result.rows.length')
789
870
 
790
871
  end
791
872
 
@@ -802,17 +883,17 @@ class SpecificsTest < Test::Unit::TestCase
802
883
  "
803
884
  @context.eval(rows)
804
885
 
805
- @context.eval("row1.groupKey()").must_equal "1_*_*_"
806
- @context.eval("row1.groupKey('OccurrenceAEncounter')").must_equal "X_*_*_"
807
- @context.eval("row1.groupKey('OccurrenceAProcedure')").must_equal "1_*_X_"
808
- @context.eval("row2.groupKey()").must_equal "*_2_*_"
809
- @context.eval("row2.groupKey('OccurrenceAProcedure')").must_equal "*_2_X_"
810
- @context.eval("row3.groupKey()").must_equal "1_4_*_"
811
- @context.eval("row3.groupKey('OccurrenceAEncounter')").must_equal "X_4_*_"
812
- @context.eval("row3.groupKey('OccurrenceBEncounter')").must_equal "1_X_*_"
813
- @context.eval("row3.groupKey('OccurrenceAProcedure')").must_equal "1_4_X_"
814
- @context.eval("row4.groupKey()").must_equal "*_*_*_"
815
- @context.eval("row4.groupKey('OccurrenceBEncounter')").must_equal "*_X_*_"
886
+ assert_equal "1_*_*_", @context.eval("row1.groupKey()")
887
+ assert_equal "X_*_*_", @context.eval("row1.groupKey('OccurrenceAEncounter')")
888
+ assert_equal "1_*_X_", @context.eval("row1.groupKey('OccurrenceAProcedure')")
889
+ assert_equal "*_2_*_", @context.eval("row2.groupKey()")
890
+ assert_equal "*_2_X_", @context.eval("row2.groupKey('OccurrenceAProcedure')")
891
+ assert_equal "1_4_*_", @context.eval("row3.groupKey()")
892
+ assert_equal "X_4_*_", @context.eval("row3.groupKey('OccurrenceAEncounter')")
893
+ assert_equal "1_X_*_", @context.eval("row3.groupKey('OccurrenceBEncounter')")
894
+ assert_equal "1_4_X_", @context.eval("row3.groupKey('OccurrenceAProcedure')")
895
+ assert_equal "*_*_*_", @context.eval("row4.groupKey()")
896
+ assert_equal "*_X_*_", @context.eval("row4.groupKey('OccurrenceBEncounter')")
816
897
 
817
898
  end
818
899
 
@@ -839,13 +920,13 @@ class SpecificsTest < Test::Unit::TestCase
839
920
  "
840
921
  @context.eval(rows)
841
922
 
842
- @context.eval("specific1.group()['1_*_'].length").must_equal 2
843
- @context.eval("specific1.group()['2_*_'].length").must_equal 3
844
- @context.eval("specific1.group()['3_*_'].length").must_equal 1
923
+ assert_equal 2, @context.eval("specific1.group()['1_*_'].length")
924
+ assert_equal 3, @context.eval("specific1.group()['2_*_'].length")
925
+ assert_equal 1, @context.eval("specific1.group()['3_*_'].length")
845
926
 
846
- @context.eval("specific2.group('OccurrenceAEncounter')['X_1_'].length").must_equal 2
847
- @context.eval("specific2.group('OccurrenceAEncounter')['X_2_'].length").must_equal 3
848
- @context.eval("specific2.group('OccurrenceAEncounter')['X_3_'].length").must_equal 1
927
+ assert_equal 2, @context.eval("specific2.group('OccurrenceAEncounter')['X_1_'].length")
928
+ assert_equal 3, @context.eval("specific2.group('OccurrenceAEncounter')['X_2_'].length")
929
+ assert_equal 1, @context.eval("specific2.group('OccurrenceAEncounter')['X_3_'].length")
849
930
 
850
931
  end
851
932
 
@@ -866,21 +947,21 @@ class SpecificsTest < Test::Unit::TestCase
866
947
  new Row('OccurrenceAEncounter',{'OccurrenceAEncounter': new hQuery.CodedEntry({_id:15}), 'OccurrenceBEncounter':new hQuery.CodedEntry({'_id':3})})]
867
948
  "
868
949
  @context.eval(rows)
869
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows).length').must_equal 6
870
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[0].id').must_equal '10'
871
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[1].id').must_equal '11'
872
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[2].id').must_equal '12'
873
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[3].id').must_equal '13'
874
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[4].id').must_equal '14'
875
- @context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[5].id').must_equal '15'
876
-
877
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows).length").must_equal 6
878
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[0].id").must_equal '10'
879
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[1].id").must_equal '11'
880
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[2].id").must_equal '12'
881
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[3].id").must_equal '13'
882
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[4].id").must_equal '14'
883
- @context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[5].id").must_equal '15'
950
+ assert_equal 6, @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows).length')
951
+ assert_equal '10', @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows)[0].id')
952
+ assert_equal '11', @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows)[1].id')
953
+ assert_equal '12', @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows)[2].id')
954
+ assert_equal '13', @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows)[3].id')
955
+ assert_equal '14', @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows)[4].id')
956
+ assert_equal '15', @context.eval('hqmf.SpecificsManager.extractEventsForLeftMost(non_specific_rows)[5].id')
957
+
958
+ assert_equal 6, @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows).length")
959
+ assert_equal '10', @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows)[0].id")
960
+ assert_equal '11', @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows)[1].id")
961
+ assert_equal '12', @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows)[2].id")
962
+ assert_equal '13', @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows)[3].id")
963
+ assert_equal '14', @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows)[4].id")
964
+ assert_equal '15', @context.eval("hqmf.SpecificsManager.extractEventsForLeftMost(specific_rows)[5].id")
884
965
 
885
966
  end
886
967
 
@@ -922,68 +1003,68 @@ class SpecificsTest < Test::Unit::TestCase
922
1003
  lessThanThree = 'new IVL_PQ(null, new PQ(2))'
923
1004
  exactly1 = 'new IVL_PQ(new PQ(1), new PQ(1))'
924
1005
 
925
- @context.eval("specific1.COUNT(#{moreThanOne}).rows.length").must_equal 5
926
- @context.eval("specific1.COUNT(#{moreThanOne}).rows[0].tempValue.id").must_equal '10'
927
- @context.eval("specific1.COUNT(#{moreThanOne}).rows[1].tempValue.id").must_equal '11'
928
- @context.eval("specific1.COUNT(#{moreThanOne}).rows[2].tempValue.id").must_equal '12'
929
- @context.eval("specific1.COUNT(#{moreThanOne}).rows[3].tempValue.id").must_equal '13'
930
- @context.eval("specific1.COUNT(#{moreThanOne}).rows[4].tempValue.id").must_equal '14'
931
- @context.eval("specific1.COUNT(#{lessThanThree}).rows.length").must_equal 3
932
- @context.eval("specific1.COUNT(#{lessThanThree}).rows[0].tempValue.id").must_equal '10'
933
- @context.eval("specific1.COUNT(#{lessThanThree}).rows[1].tempValue.id").must_equal '11'
934
- @context.eval("specific1.COUNT(#{lessThanThree}).rows[2].tempValue.id").must_equal '15'
935
- @context.eval("specific1.COUNT(#{exactly1}).rows.length").must_equal 1
936
- @context.eval("specific1.COUNT(#{exactly1}).rows[0].tempValue.id").must_equal '15'
937
-
938
- @context.eval("specific2.COUNT(#{moreThanOne}).rows.length").must_equal 5
939
- @context.eval("specific2.COUNT(#{moreThanOne}).rows[0].values[0].id").must_equal '10'
940
- @context.eval("specific2.COUNT(#{moreThanOne}).rows[1].values[0].id").must_equal '11'
941
- @context.eval("specific2.COUNT(#{moreThanOne}).rows[2].values[0].id").must_equal '12'
942
- @context.eval("specific2.COUNT(#{moreThanOne}).rows[3].values[0].id").must_equal '13'
943
- @context.eval("specific2.COUNT(#{moreThanOne}).rows[4].values[0].id").must_equal '14'
944
- @context.eval("specific2.COUNT(#{lessThanThree}).rows.length").must_equal 3
945
- @context.eval("specific2.COUNT(#{lessThanThree}).rows[0].values[0].id").must_equal '10'
946
- @context.eval("specific2.COUNT(#{lessThanThree}).rows[1].values[0].id").must_equal '11'
947
- @context.eval("specific2.COUNT(#{lessThanThree}).rows[2].values[0].id").must_equal '15'
948
- @context.eval("specific2.COUNT(#{exactly1}).rows.length").must_equal 1
949
- @context.eval("specific2.COUNT(#{exactly1}).rows[0].values[0].id").must_equal '15'
950
-
951
- @context.eval("specific3.COUNT(#{exactly1}).rows.length").must_equal 1
952
- @context.eval("specific4.COUNT(#{moreThanOne}).rows.length").must_equal 0
1006
+ assert_equal 5, @context.eval("specific1.COUNT(#{moreThanOne}).rows.length")
1007
+ assert_equal '10', @context.eval("specific1.COUNT(#{moreThanOne}).rows[0].nonSpecificLeftMost.id")
1008
+ assert_equal '11', @context.eval("specific1.COUNT(#{moreThanOne}).rows[1].nonSpecificLeftMost.id")
1009
+ assert_equal '12', @context.eval("specific1.COUNT(#{moreThanOne}).rows[2].nonSpecificLeftMost.id")
1010
+ assert_equal '13', @context.eval("specific1.COUNT(#{moreThanOne}).rows[3].nonSpecificLeftMost.id")
1011
+ assert_equal '14', @context.eval("specific1.COUNT(#{moreThanOne}).rows[4].nonSpecificLeftMost.id")
1012
+ assert_equal 3, @context.eval("specific1.COUNT(#{lessThanThree}).rows.length")
1013
+ assert_equal '10', @context.eval("specific1.COUNT(#{lessThanThree}).rows[0].nonSpecificLeftMost.id")
1014
+ assert_equal '11', @context.eval("specific1.COUNT(#{lessThanThree}).rows[1].nonSpecificLeftMost.id")
1015
+ assert_equal '15', @context.eval("specific1.COUNT(#{lessThanThree}).rows[2].nonSpecificLeftMost.id")
1016
+ assert_equal 1, @context.eval("specific1.COUNT(#{exactly1}).rows.length")
1017
+ assert_equal '15', @context.eval("specific1.COUNT(#{exactly1}).rows[0].nonSpecificLeftMost.id")
1018
+
1019
+ assert_equal 5, @context.eval("specific2.COUNT(#{moreThanOne}).rows.length")
1020
+ assert_equal '10', @context.eval("specific2.COUNT(#{moreThanOne}).rows[0].values[0].id")
1021
+ assert_equal '11', @context.eval("specific2.COUNT(#{moreThanOne}).rows[1].values[0].id")
1022
+ assert_equal '12', @context.eval("specific2.COUNT(#{moreThanOne}).rows[2].values[0].id")
1023
+ assert_equal '13', @context.eval("specific2.COUNT(#{moreThanOne}).rows[3].values[0].id")
1024
+ assert_equal '14', @context.eval("specific2.COUNT(#{moreThanOne}).rows[4].values[0].id")
1025
+ assert_equal 3, @context.eval("specific2.COUNT(#{lessThanThree}).rows.length")
1026
+ assert_equal '10', @context.eval("specific2.COUNT(#{lessThanThree}).rows[0].values[0].id")
1027
+ assert_equal '11', @context.eval("specific2.COUNT(#{lessThanThree}).rows[1].values[0].id")
1028
+ assert_equal '15', @context.eval("specific2.COUNT(#{lessThanThree}).rows[2].values[0].id")
1029
+ assert_equal 1, @context.eval("specific2.COUNT(#{exactly1}).rows.length")
1030
+ assert_equal '15', @context.eval("specific2.COUNT(#{exactly1}).rows[0].values[0].id")
1031
+
1032
+ assert_equal 1, @context.eval("specific3.COUNT(#{exactly1}).rows.length")
1033
+ assert_equal 0, @context.eval("specific4.COUNT(#{moreThanOne}).rows.length")
953
1034
 
954
1035
 
955
1036
  ###
956
1037
  ##### FIRST
957
1038
  ###
958
- @context.eval("specific1.FIRST().rows.length").must_equal 3
959
- @context.eval("specific1.FIRST().rows[0].tempValue.id").must_equal '11'
960
- @context.eval("specific1.FIRST().rows[1].tempValue.id").must_equal '12'
961
- @context.eval("specific1.FIRST().rows[2].tempValue.id").must_equal '15'
962
-
963
- @context.eval("specific2.FIRST().rows.length").must_equal 3
964
- @context.eval("specific2.FIRST().rows[0].values[0].id").must_equal '11'
965
- @context.eval("specific2.FIRST().rows[1].values[0].id").must_equal '12'
966
- @context.eval("specific2.FIRST().rows[2].values[0].id").must_equal '15'
1039
+ assert_equal 3, @context.eval("specific1.FIRST().rows.length")
1040
+ assert_equal '11', @context.eval("specific1.FIRST().rows[0].nonSpecificLeftMost.id")
1041
+ assert_equal '12', @context.eval("specific1.FIRST().rows[1].nonSpecificLeftMost.id")
1042
+ assert_equal '15', @context.eval("specific1.FIRST().rows[2].nonSpecificLeftMost.id")
1043
+
1044
+ assert_equal 3, @context.eval("specific2.FIRST().rows.length")
1045
+ assert_equal '11', @context.eval("specific2.FIRST().rows[0].values[0].id")
1046
+ assert_equal '12', @context.eval("specific2.FIRST().rows[1].values[0].id")
1047
+ assert_equal '15', @context.eval("specific2.FIRST().rows[2].values[0].id")
967
1048
 
968
- @context.eval("specific3.FIRST().rows.length").must_equal 1
969
- @context.eval("specific4.FIRST().rows.length").must_equal 0
1049
+ assert_equal 1, @context.eval("specific3.FIRST().rows.length")
1050
+ assert_equal 0, @context.eval("specific4.FIRST().rows.length")
970
1051
 
971
1052
  ###
972
1053
  ##### MOST RECENT
973
1054
  ###
974
1055
 
975
- @context.eval("specific1.RECENT().rows.length").must_equal 3
976
- @context.eval("specific1.RECENT().rows[0].tempValue.id").must_equal '10'
977
- @context.eval("specific1.RECENT().rows[1].tempValue.id").must_equal '13'
978
- @context.eval("specific1.RECENT().rows[2].tempValue.id").must_equal '15'
979
-
980
- @context.eval("specific2.RECENT().rows.length").must_equal 3
981
- @context.eval("specific2.RECENT().rows[0].values[0].id").must_equal '10'
982
- @context.eval("specific2.RECENT().rows[1].values[0].id").must_equal '13'
983
- @context.eval("specific2.RECENT().rows[2].values[0].id").must_equal '15'
1056
+ assert_equal 3, @context.eval("specific1.RECENT().rows.length")
1057
+ assert_equal '10', @context.eval("specific1.RECENT().rows[0].nonSpecificLeftMost.id")
1058
+ assert_equal '13', @context.eval("specific1.RECENT().rows[1].nonSpecificLeftMost.id")
1059
+ assert_equal '15', @context.eval("specific1.RECENT().rows[2].nonSpecificLeftMost.id")
1060
+
1061
+ assert_equal 3, @context.eval("specific2.RECENT().rows.length")
1062
+ assert_equal '10', @context.eval("specific2.RECENT().rows[0].values[0].id")
1063
+ assert_equal '13', @context.eval("specific2.RECENT().rows[1].values[0].id")
1064
+ assert_equal '15', @context.eval("specific2.RECENT().rows[2].values[0].id")
984
1065
 
985
- @context.eval("specific3.RECENT().rows.length").must_equal 1
986
- @context.eval("specific4.RECENT().rows.length").must_equal 0
1066
+ assert_equal 1, @context.eval("specific3.RECENT().rows.length")
1067
+ assert_equal 0, @context.eval("specific4.RECENT().rows.length")
987
1068
 
988
1069
 
989
1070
  end