File: test_integer_range.rb

package info (click to toggle)
ruby-oj 3.16.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,852 kB
  • sloc: ansic: 19,402; ruby: 11,451; makefile: 17
file content (72 lines) | stat: -rwxr-xr-x 2,260 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env ruby
# frozen_string_literal: true

$LOAD_PATH << __dir__
@oj_dir = File.dirname(File.expand_path(__dir__))
%w(lib ext).each do |dir|
  $LOAD_PATH << File.join(@oj_dir, dir)
end

require 'minitest'
require 'minitest/autorun'
require 'oj'

class IntegerRangeTest < Minitest::Test
  def setup
    @default_options = Oj.default_options
    # in null mode other options other than the number formats are not used.
    Oj.default_options = { :mode => :null, bigdecimal_as_decimal: true }
  end

  def teardown
    Oj.default_options = @default_options
  end

  def test_range
    test = {s: 0, s2: -1, s3: 1, u: -2, u2: 2, u3: 9_007_199_254_740_993}
    exp = '{"s":0,"s2":-1,"s3":1,"u":"-2","u2":"2","u3":"9007199254740993"}'
    assert_equal(exp, Oj.dump(test, integer_range: (-1..1)))
  end

  def test_bignum
    test = {u: -10_000_000_000_000_000_000, u2: 10_000_000_000_000_000_000}
    exp = '{"u":"-10000000000000000000","u2":"10000000000000000000"}'
    assert_equal(exp, Oj.dump(test, integer_range: (-1..1)))
  end

  def test_valid_modes
    test = {safe: 0, unsafe: 9_007_199_254_740_993}
    exp  = '{"safe":0,"unsafe":"9007199254740993"}'

    [:strict, :null, :compat, :rails, :custom].each do |mode|
      assert_equal(exp, Oj.dump(test, mode: mode, integer_range: (-1..1)), "Invalid mode #{mode}")
    end

    exp = '{":safe":0,":unsafe":"9007199254740993"}'
    [:object].each do |mode|
      assert_equal(exp, Oj.dump(test, mode: mode, integer_range: (-1..1)), "Invalid mode #{mode}")
    end
  end

  def test_modes_without_opt
    test = {safe: 0, unsafe: 10_000_000_000_000_000_000}
    exp = '{"safe":0,"unsafe":10000000000000000000}'

    [:strict, :null, :compat, :rails, :custom].each do |mode|
      assert_equal(exp, Oj.dump(test, mode: mode), "Invalid mode #{mode}")
    end

    exp = '{":safe":0,":unsafe":10000000000000000000}'
    [:object].each do |mode|
      assert_equal(exp, Oj.dump(test, mode: mode), "Invalid mode #{mode}")
    end
  end

  def test_accept_nil_and_false
    test = {safe: 0, unsafe: 10_000_000_000_000_000_000}
    exp = '{"safe":0,"unsafe":10000000000000000000}'

    assert_equal(exp, Oj.dump(test, integer_range: nil))
    assert_equal(exp, Oj.dump(test, integer_range: false))
  end
end