oj 3.13.19 → 3.13.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfbe0dd2157d1aba97ad11d82eee1870fbb64f4f197ae75b17a2e781c64144f7
4
- data.tar.gz: 907ff02298adc4555834ca1c1c6078a3586abfde85f790b4dcba284c5be60248
3
+ metadata.gz: 958a558e09c25d5de9548af67dff6586686def4a9073b3cee6ba8403930eda48
4
+ data.tar.gz: 2f928e9e849ca695d03ad9a396ec7f2df3508b99d10baa11a8cb538a7b3a0e52
5
5
  SHA512:
6
- metadata.gz: c56828991af620bb1436db19b5660ec588fce4858b455bd2b6c7f11f2bccaf3a7afca8fe98b62ad868a1a18ab584d38220e1b5c4c1243d3a8c1201c3b0c51a54
7
- data.tar.gz: f687f4bd9a0a64ecd75cee755722cc2f4f80fc356fe884fd34bf5cf68066d2e648050de7a49c93c121740e790afbcc168b1a8efc5f8280f64ca9bf3d23bc736b
6
+ metadata.gz: 758bb300ed853d161750d100a8fbdd755e37ae8e15ae94f1e7a4cbd613c787002758d4fc5834fd47a7ef8fb78446208f896afee31c0bc023bcdeb381aba1f98c
7
+ data.tar.gz: 54127873544ca146a61d7ca4012ff9d2eb4b83bdcbb3f06eea092d4e4ad517c453196a59edc2743b42736ab276e0eb96889045e0d3f2200dcbaf4a2b79353db3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.13.20 - 2022-08-07
4
+
5
+ - SSE4 made optional with a `--with-sse42` flag to the compile.
6
+
3
7
  ## 3.13.19 - 2022-07-29
4
8
 
5
9
  - TruffleRuby issues resolved.
data/ext/oj/extconf.rb CHANGED
@@ -34,21 +34,9 @@ have_func('rb_hash_bulk_insert', 'ruby.h') unless '2' == version[0] && '6' == ve
34
34
 
35
35
  dflags['OJ_DEBUG'] = true unless ENV['OJ_DEBUG'].nil?
36
36
 
37
- src =<<~SRC
38
- #include <string.h>
39
- #include <nmmintrin.h>
40
- int main(int argc, char **argv) {
41
- const char *str = "hello ";
42
- const char chars[16] = "\x00\\\"";
43
- const __m128i terminate = _mm_loadu_si128((const __m128i *)&chars[0]);
44
- const __m128i string = _mm_loadu_si128((const __m128i *)str);
45
- int r = _mm_cmpestri(terminate, 3, string, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT);
46
- return r == 16 ? 0 : 1;
47
- }
48
- SRC
49
-
50
- if try_run(src, '-msse4.2')
37
+ if with_config('--with-sse42')
51
38
  $CPPFLAGS += ' -msse4.2'
39
+ dflags['OJ_USE_SSE4_2'] = 1
52
40
  end
53
41
 
54
42
  dflags.each do |k,v|
data/ext/oj/parse.c CHANGED
@@ -192,32 +192,7 @@ static inline const char *scan_string_noSIMD(const char *str, const char *end) {
192
192
  return str;
193
193
  }
194
194
 
195
- // Taken from Tensorflow:
196
- // https://github.com/tensorflow/tensorflow/blob/5dcfc51118817f27fad5246812d83e5dccdc5f72/tensorflow/core/lib/hash/crc32c_accelerate.cc#L21-L38
197
- #ifdef __SSE4_2__
198
- #if defined(__x86_64__) && defined(__GNUC__) && \
199
- (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
200
- #define USE_SSE_DETECT 1
201
- #elif defined(__x86_64__) && defined(__clang__)
202
- #if __has_builtin(__builtin_cpu_supports)
203
- #define USE_SSE_DETECT 1
204
- #endif
205
- #endif
206
- #endif /* __SSE4_2__ */
207
-
208
- // This version of Apple clang has a bug:
209
- // https://llvm.org/bugs/show_bug.cgi?id=25510
210
- #if defined(__APPLE__) && (__clang_major__ <= 8)
211
- #undef USE_SSE_DETECT
212
- #endif
213
-
214
- #if defined(TRUFFLERUBY)
215
- #undef USE_SSE_DETECT
216
- #endif
217
-
218
- #ifdef USE_SSE_DETECT
219
- #include <nmmintrin.h>
220
-
195
+ #ifdef OJ_USE_SSE4_2
221
196
  static inline const char *scan_string_SIMD(const char *str, const char *end) {
222
197
  static const char chars[16] = "\x00\\\"";
223
198
  const __m128i terminate = _mm_loadu_si128((const __m128i *)&chars[0]);
@@ -236,23 +211,12 @@ static inline const char *scan_string_SIMD(const char *str, const char *end) {
236
211
  }
237
212
  #endif
238
213
 
239
- static bool cpu_supports_sse42(void) {
240
- #if USE_SSE_DETECT
241
- __builtin_cpu_init();
242
- return (__builtin_cpu_supports("sse4.2"));
243
- #else
244
- return false;
245
- #endif
246
- }
247
-
248
214
  static const char *(*scan_func) (const char *str, const char *end) = scan_string_noSIMD;
249
215
 
250
216
  void oj_scanner_init(void) {
251
- if (cpu_supports_sse42()) {
252
- #if USE_SSE_DETECT
253
- scan_func = scan_string_SIMD;
217
+ #ifdef OJ_USE_SSE4_2
218
+ scan_func = scan_string_SIMD;
254
219
  #endif
255
- }
256
220
  }
257
221
 
258
222
  // entered at /
@@ -667,7 +631,7 @@ static void read_num(ParseInfo pi) {
667
631
  }
668
632
 
669
633
  static void array_start(ParseInfo pi) {
670
- volatile VALUE v = pi->start_array(pi);
634
+ VALUE v = pi->start_array(pi);
671
635
 
672
636
  stack_push(&pi->stack, v, NEXT_ARRAY_NEW);
673
637
  }
@@ -691,13 +655,13 @@ static void array_end(ParseInfo pi) {
691
655
  }
692
656
 
693
657
  static void hash_start(ParseInfo pi) {
694
- volatile VALUE v = pi->start_hash(pi);
658
+ VALUE v = pi->start_hash(pi);
695
659
 
696
660
  stack_push(&pi->stack, v, NEXT_HASH_NEW);
697
661
  }
698
662
 
699
663
  static void hash_end(ParseInfo pi) {
700
- volatile Val hash = stack_peek(&pi->stack);
664
+ Val hash = stack_peek(&pi->stack);
701
665
 
702
666
  // leave hash on stack until just before
703
667
  if (0 == hash) {
@@ -884,7 +848,7 @@ static long double exp_plus[] = {
884
848
 
885
849
  VALUE
886
850
  oj_num_as_value(NumInfo ni) {
887
- volatile VALUE rnum = Qnil;
851
+ VALUE rnum = Qnil;
888
852
 
889
853
  if (ni->infinity) {
890
854
  if (ni->neg) {
@@ -919,7 +883,7 @@ oj_num_as_value(NumInfo ni) {
919
883
  }
920
884
  } else { // decimal
921
885
  if (ni->big) {
922
- volatile VALUE bd = rb_str_new(ni->str, ni->len);
886
+ VALUE bd = rb_str_new(ni->str, ni->len);
923
887
 
924
888
  rnum = rb_rescue2(parse_big_decimal, bd, rescue_big_decimal, bd, rb_eException, 0);
925
889
  if (ni->no_big) {
@@ -947,7 +911,7 @@ oj_num_as_value(NumInfo ni) {
947
911
  }
948
912
  rnum = rb_float_new((double)ld);
949
913
  } else if (RubyDec == ni->bigdec_load) {
950
- volatile VALUE sv = rb_str_new(ni->str, ni->len);
914
+ VALUE sv = rb_str_new(ni->str, ni->len);
951
915
 
952
916
  rnum = rb_funcall(sv, rb_intern("to_f"), 0);
953
917
  } else {
@@ -1042,7 +1006,7 @@ static VALUE protect_parse(VALUE pip) {
1042
1006
 
1043
1007
  extern int oj_utf8_index;
1044
1008
 
1045
- static void oj_pi_set_input_str(ParseInfo pi, volatile VALUE *inputp) {
1009
+ static void oj_pi_set_input_str(ParseInfo pi, VALUE *inputp) {
1046
1010
  int idx = RB_ENCODING_GET(*inputp);
1047
1011
 
1048
1012
  if (oj_utf8_encoding_index != idx) {
@@ -1055,12 +1019,12 @@ static void oj_pi_set_input_str(ParseInfo pi, volatile VALUE *inputp) {
1055
1019
 
1056
1020
  VALUE
1057
1021
  oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yieldOk) {
1058
- char * buf = 0;
1059
- volatile VALUE input;
1060
- volatile VALUE wrapped_stack;
1061
- volatile VALUE result = Qnil;
1062
- int line = 0;
1063
- int free_json = 0;
1022
+ char * buf = 0;
1023
+ VALUE input;
1024
+ VALUE wrapped_stack;
1025
+ VALUE result = Qnil;
1026
+ int line = 0;
1027
+ int free_json = 0;
1064
1028
 
1065
1029
  if (argc < 1) {
1066
1030
  rb_raise(rb_eArgError, "Wrong number of arguments to parse.");
@@ -1096,8 +1060,8 @@ oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yie
1096
1060
  rb_raise(rb_eTypeError, "Nil is not a valid JSON source.");
1097
1061
  }
1098
1062
  } else {
1099
- VALUE clas = rb_obj_class(input);
1100
- volatile VALUE s;
1063
+ VALUE clas = rb_obj_class(input);
1064
+ VALUE s;
1101
1065
 
1102
1066
  if (oj_stringio_class == clas) {
1103
1067
  s = rb_funcall2(input, oj_string_id, 0, 0);
data/lib/oj/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.13.19'
4
+ VERSION = '3.13.20'
5
5
  end
@@ -24,6 +24,8 @@ class JSONParserTest < Test::Unit::TestCase
24
24
  end if defined?(Encoding::UTF_16)
25
25
 
26
26
  def test_error_message_encoding
27
+ omit 'TruffleRuby causes NameError(<uninitialized constant JSON::Ext>)' if RUBY_ENGINE == 'truffleruby'
28
+
27
29
  bug10705 = '[ruby-core:67386] [Bug #10705]'
28
30
  json = ".\"\xE2\x88\x9A\"".force_encoding(Encoding::UTF_8)
29
31
  e = assert_raise(JSON::ParserError) {
data/test/test_custom.rb CHANGED
@@ -200,6 +200,8 @@ class CustomJuice < Minitest::Test
200
200
  end
201
201
 
202
202
  def test_deep_nest
203
+ skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
204
+
203
205
  begin
204
206
  n = 10000
205
207
  Oj.strict_load('[' * n + ']' * n)
@@ -258,6 +260,8 @@ class CustomJuice < Minitest::Test
258
260
  end
259
261
 
260
262
  def test_object
263
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
264
+
261
265
  obj = Jeez.new(true, 58)
262
266
  json = Oj.dump(obj, create_id: "^o", use_to_json: false, use_as_json: false, use_to_hash: false)
263
267
  assert_equal(%|{"x":true,"y":58,"_z":"true"}|, json)
@@ -403,11 +407,15 @@ class CustomJuice < Minitest::Test
403
407
  end
404
408
 
405
409
  def test_range
410
+ skip 'TruffleRuby fails this spec' if RUBY_ENGINE == 'truffleruby'
411
+
406
412
  obj = 3..8
407
413
  dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
408
414
  end
409
415
 
410
416
  def test_date
417
+ skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
418
+
411
419
  obj = Date.new(2017, 1, 5)
412
420
  dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
413
421
  end
@@ -437,6 +445,8 @@ class CustomJuice < Minitest::Test
437
445
  end
438
446
 
439
447
  def test_datetime
448
+ skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
449
+
440
450
  obj = DateTime.new(2017, 1, 5, 10, 20, 30)
441
451
  dump_and_load(obj, false, :create_id => "^o", :create_additions => true)
442
452
  end
@@ -480,6 +490,8 @@ class CustomJuice < Minitest::Test
480
490
  end
481
491
 
482
492
  def test_time
493
+ skip 'TruffleRuby fails this spec' if RUBY_ENGINE == 'truffleruby'
494
+
483
495
  obj = Time.now()
484
496
  dump_load_dump(obj, false, :time_format => :unix, :create_id => "^o", :create_additions => true)
485
497
  dump_load_dump(obj, false, :time_format => :unix_zone, :create_id => "^o", :create_additions => true)
data/test/test_file.rb CHANGED
@@ -125,13 +125,16 @@ class FileJuice < Minitest::Test
125
125
 
126
126
  # Time
127
127
  def test_time_object
128
+ skip 'TruffleRuby fails this spec' if RUBY_ENGINE == 'truffleruby'
129
+
128
130
  t = Time.now()
129
131
  Oj.default_options = { :mode => :object, :time_format => :unix_zone }
130
132
  dump_and_load(t, false)
131
133
  end
132
134
  def test_time_object_early
133
- # Windows does not support dates before 1970.
134
- return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
135
+ skip 'Windows does not support dates before 1970.' if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
136
+ skip 'TruffleRuby fails this spec' if RUBY_ENGINE == 'truffleruby'
137
+
135
138
  t = Time.xmlschema("1954-01-05T00:00:00.123456")
136
139
  Oj.default_options = { :mode => :object, :time_format => :unix_zone }
137
140
  dump_and_load(t, false)
@@ -166,6 +169,8 @@ class FileJuice < Minitest::Test
166
169
  assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
167
170
  elsif 'jruby' == $ruby
168
171
  assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
172
+ elsif 'truffleruby' == $ruby
173
+ assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
169
174
  else
170
175
  assert_equal(%{{"^u":["Range",1,7,false]}}, json)
171
176
  end
data/test/test_gc.rb CHANGED
@@ -26,10 +26,12 @@ class GCTest < Minitest::Test
26
26
 
27
27
  def setup
28
28
  @default_options = Oj.default_options
29
+ GC.stress = true
29
30
  end
30
31
 
31
32
  def teardown
32
33
  Oj.default_options = @default_options
34
+ GC.stress = false
33
35
  end
34
36
 
35
37
  # if no crash then the GC marking is working
@@ -41,9 +43,20 @@ class GCTest < Minitest::Test
41
43
  end
42
44
 
43
45
  def test_parse_object_gc
46
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
47
+
44
48
  g = Goo.new(0, nil)
45
49
  100.times { |i| g = Goo.new(i, g) }
46
50
  json = Oj.dump(g, :mode => :object)
47
51
  Oj.object_load(json)
48
52
  end
53
+
54
+ def test_parse_gc
55
+ json = '{"a":"Alpha","b":true,"c":12345,"d":[true,[false,[-123456789,null],3.9676,["Something else.",false],null]],"e":{"zero":null,"one":1,"two":2,"three":[3],"four":[0,1,2,3,4]},"f":null,"h":{"a":{"b":{"c":{"d":{"e":{"f":{"g":null}}}}}}},"i":[[[[[[[null]]]]]]]}'
56
+
57
+ 50.times do
58
+ data = Oj.load(json)
59
+ assert_equal(json, Oj.dump(data))
60
+ end
61
+ end
49
62
  end
@@ -23,18 +23,24 @@ class IntegerRangeTest < Minitest::Test
23
23
  end
24
24
 
25
25
  def test_range
26
+ skip 'TruffleRuby fails this spec with `ArgumentError: :integer_range must be a range of Fixnum.`' if RUBY_ENGINE == 'truffleruby'
27
+
26
28
  test = {s: 0, s2: -1, s3: 1, u: -2, u2: 2, u3: 9007199254740993}
27
29
  exp = '{"s":0,"s2":-1,"s3":1,"u":"-2","u2":"2","u3":"9007199254740993"}'
28
30
  assert_equal(exp, Oj.dump(test, integer_range: (-1..1)))
29
31
  end
30
32
 
31
33
  def test_bignum
34
+ skip 'TruffleRuby fails this spec with `ArgumentError: :integer_range must be a range of Fixnum.`' if RUBY_ENGINE == 'truffleruby'
35
+
32
36
  test = {u: -10000000000000000000, u2: 10000000000000000000}
33
37
  exp = '{"u":"-10000000000000000000","u2":"10000000000000000000"}'
34
38
  assert_equal(exp, Oj.dump(test, integer_range: (-1..1)))
35
39
  end
36
40
 
37
41
  def test_valid_modes
42
+ skip 'TruffleRuby fails this spec with `ArgumentError: :integer_range must be a range of Fixnum.`' if RUBY_ENGINE == 'truffleruby'
43
+
38
44
  test = {safe: 0, unsafe: 9007199254740993}
39
45
  exp = '{"safe":0,"unsafe":"9007199254740993"}'
40
46
 
data/test/test_object.rb CHANGED
@@ -461,6 +461,8 @@ class ObjectJuice < Minitest::Test
461
461
  end
462
462
 
463
463
  def test_json_module_object
464
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
465
+
464
466
  obj = One::Two::Three::Deep.new()
465
467
  dump_and_load(obj, false)
466
468
  end
@@ -631,11 +633,15 @@ class ObjectJuice < Minitest::Test
631
633
  end
632
634
 
633
635
  def test_json_object
636
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
637
+
634
638
  obj = Jeez.new(true, 58)
635
639
  dump_and_load(obj, false)
636
640
  end
637
641
 
638
642
  def test_json_object_create_deep
643
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
644
+
639
645
  obj = One::Two::Three::Deep.new()
640
646
  dump_and_load(obj, false)
641
647
  end
@@ -672,6 +678,8 @@ class ObjectJuice < Minitest::Test
672
678
  end
673
679
 
674
680
  def test_json_anonymous_struct
681
+ skip 'TruffleRuby fails this spec with `TypeError: allocator undefined for Class`' if RUBY_ENGINE == 'truffleruby'
682
+
675
683
  s = Struct.new(:x, :y)
676
684
  obj = s.new(1, 2)
677
685
  json = Oj.dump(obj, :indent => 2, :mode => :object)
@@ -694,6 +702,8 @@ class ObjectJuice < Minitest::Test
694
702
  end
695
703
 
696
704
  def test_json_object_object
705
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
706
+
697
707
  obj = Jeez.new(true, 58)
698
708
  json = Oj.dump(obj, mode: :object, indent: 2, ignore_under: true)
699
709
  assert(%{{
@@ -713,6 +723,8 @@ class ObjectJuice < Minitest::Test
713
723
  end
714
724
 
715
725
  def test_to_hash_object_object
726
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
727
+
716
728
  obj = Jazz.new(true, 58)
717
729
  json = Oj.dump(obj, :mode => :object, :indent => 2)
718
730
  assert(%{{
@@ -732,6 +744,8 @@ class ObjectJuice < Minitest::Test
732
744
  end
733
745
 
734
746
  def test_as_json_object_object
747
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
748
+
735
749
  obj = Orange.new(true, 58)
736
750
  json = Oj.dump(obj, :mode => :object, :indent => 2)
737
751
  assert(%{{
@@ -751,6 +765,8 @@ class ObjectJuice < Minitest::Test
751
765
  end
752
766
 
753
767
  def test_object_object_no_cache
768
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
769
+
754
770
  obj = Jam.new(true, 58)
755
771
  json = Oj.dump(obj, :mode => :object, :indent => 2)
756
772
  assert(%{{
@@ -779,6 +795,8 @@ class ObjectJuice < Minitest::Test
779
795
  end
780
796
 
781
797
  def test_exception
798
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
799
+
782
800
  err = nil
783
801
  begin
784
802
  raise StandardError.new('A Message')
@@ -809,6 +827,8 @@ class ObjectJuice < Minitest::Test
809
827
  end
810
828
 
811
829
  def test_exception_subclass
830
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
831
+
812
832
  err = nil
813
833
  begin
814
834
  raise SubX.new
@@ -830,6 +850,8 @@ class ObjectJuice < Minitest::Test
830
850
  json = Oj.dump(1..7, :mode => :object, :indent => 0)
831
851
  if 'rubinius' == $ruby
832
852
  assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
853
+ elsif 'truffleruby' == $ruby
854
+ assert(%{{"^O":"Range","begin":1,"end":7,"exclude_end?":false}} == json)
833
855
  else
834
856
  assert_equal(%{{"^u":["Range",1,7,false]}}, json)
835
857
  end
@@ -895,6 +917,8 @@ class ObjectJuice < Minitest::Test
895
917
  end
896
918
 
897
919
  def test_circular_object
920
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
921
+
898
922
  obj = Jeez.new(nil, 58)
899
923
  obj.x = obj
900
924
  json = Oj.dump(obj, :mode => :object, :indent => 2, :circular => true)
@@ -903,6 +927,8 @@ class ObjectJuice < Minitest::Test
903
927
  end
904
928
 
905
929
  def test_circular_object2
930
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
931
+
906
932
  obj = Jam.new(nil, 58)
907
933
  obj.x = obj
908
934
  json = Oj.dump(obj, :mode => :object, :indent => 2, :circular => true)
@@ -925,6 +951,8 @@ class ObjectJuice < Minitest::Test
925
951
  end
926
952
 
927
953
  def test_circular
954
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
955
+
928
956
  h = { 'a' => 7 }
929
957
  obj = Jeez.new(h, 58)
930
958
  obj.x['b'] = obj
@@ -935,6 +963,8 @@ class ObjectJuice < Minitest::Test
935
963
  end
936
964
 
937
965
  def test_circular2
966
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
967
+
938
968
  h = { 'a' => 7 }
939
969
  obj = Jam.new(h, 58)
940
970
  obj.x['b'] = obj
@@ -947,6 +977,8 @@ class ObjectJuice < Minitest::Test
947
977
  end
948
978
 
949
979
  def test_omit_nil
980
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
981
+
950
982
  jam = Jam.new({'a' => 1, 'b' => nil }, nil)
951
983
 
952
984
  json = Oj.dump(jam, :omit_nil => true, :mode => :object)
@@ -1001,16 +1033,22 @@ class ObjectJuice < Minitest::Test
1001
1033
  end
1002
1034
 
1003
1035
  def test_auto_string
1036
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
1037
+
1004
1038
  s = AutoStrung.new("Pete", true)
1005
1039
  dump_and_load(s, false)
1006
1040
  end
1007
1041
 
1008
1042
  def test_auto_array
1043
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
1044
+
1009
1045
  a = AutoArray.new([1, 'abc', nil], true)
1010
1046
  dump_and_load(a, false)
1011
1047
  end
1012
1048
 
1013
1049
  def test_auto_hash
1050
+ skip 'TruffleRuby fails this spec with `RuntimeError: rb_ivar_foreach not implemented`' if RUBY_ENGINE == 'truffleruby'
1051
+
1014
1052
  h = AutoHash.new(nil, true)
1015
1053
  h['a'] = 1
1016
1054
  h['b'] = 2
data/test/test_scp.rb CHANGED
@@ -320,8 +320,8 @@ class ScpTest < Minitest::Test
320
320
  end
321
321
 
322
322
  def test_pipe
323
- # Windows does not support fork
324
- return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
323
+ skip ' Windows does not support fork' if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
324
+ skip 'TruffleRuby fails this spec with `NotImplementedError: fork is not available`' if RUBY_ENGINE == 'truffleruby'
325
325
 
326
326
  handler = AllHandler.new()
327
327
  json = %{{"one":true,"two":false}}
@@ -357,8 +357,8 @@ class ScpTest < Minitest::Test
357
357
  end
358
358
 
359
359
  def test_pipe_close
360
- # Windows does not support fork
361
- return if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
360
+ skip 'Windows does not support fork' if RbConfig::CONFIG['host_os'] =~ /(mingw|mswin)/
361
+ skip 'TruffleRuby fails this spec with `NotImplementedError: fork is not available`' if RUBY_ENGINE == 'truffleruby'
362
362
 
363
363
  json = %{{"one":true,"two":false}}
364
364
  IO.pipe do |read_io, write_io|
data/test/test_strict.rb CHANGED
@@ -156,6 +156,8 @@ class StrictJuice < Minitest::Test
156
156
  end
157
157
 
158
158
  def test_deep_nest
159
+ skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
160
+
159
161
  begin
160
162
  n = 10000
161
163
  Oj.strict_load('[' * n + ']' * n)
data/test/test_wab.rb CHANGED
@@ -105,6 +105,8 @@ class WabJuice < Minitest::Test
105
105
  end
106
106
 
107
107
  def test_deep_nest
108
+ skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
109
+
108
110
  begin
109
111
  n = 10000
110
112
  Oj.wab_load('[' * n + ']' * n)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.13.19
4
+ version: 3.13.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-29 00:00:00.000000000 Z
11
+ date: 2022-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler