2021-11-10 16:44:57 +01:00
|
|
|
# coding: utf-8
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-02-17 15:09:29 +01:00
|
|
|
require 'minitest/autorun'
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-15 17:06:19 +01:00
|
|
|
require 'rpl'
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-17 15:09:29 +01:00
|
|
|
class TesttLanguageOperations < MiniTest::Test
|
2022-02-26 18:53:39 +01:00
|
|
|
include Types
|
|
|
|
|
2021-11-23 13:00:42 +01:00
|
|
|
def test_add
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 2 +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 3 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 "a" +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplString.new( '"1a"' )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 \'a\' +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplName.new( "'1a'" )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 dup dup →list +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplList.new( [RplNumeric.new( 1 ),
|
|
|
|
RplNumeric.new( 1 )] )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-16 16:34:59 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '"a" "b" +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplString.new( '"ab"' )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-16 16:34:59 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '"a" \'b\' +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplString.new( '"ab"' )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-16 16:34:59 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '"a" 1 +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplString.new( '"a1"' )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-16 16:34:59 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '"a" 1 dup →list +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplList.new( [RplString.new( '"a"' ),
|
|
|
|
RplNumeric.new( 1 )] )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-16 16:34:59 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '\'a\' 1 +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplName.new( 'a1' )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '\'a\' "b" +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplString.new( '"ab"' )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '\'a\' \'b\' +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplName.new( "'ab'" )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '\'a\' 1 dup →list +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplList.new( [RplName.new( 'a' ),
|
|
|
|
RplNumeric.new( 1 )] )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 a "test" 3 →list dup rev +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplList.new( [RplNumeric.new( 1 ),
|
|
|
|
RplName.new( 'a' ),
|
|
|
|
RplString.new( '"test"' ),
|
|
|
|
RplString.new( '"test"' ),
|
|
|
|
RplName.new( 'a' ),
|
|
|
|
RplNumeric.new( 1 )] )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 a "test" 3 →list 9 +'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplList.new( [RplNumeric.new( 1 ),
|
|
|
|
RplName.new( 'a' ),
|
|
|
|
RplString.new( '"test"' ),
|
|
|
|
RplNumeric.new( 9 )] )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-10 16:44:57 +01:00
|
|
|
end
|
2021-11-23 13:01:17 +01:00
|
|
|
|
|
|
|
def test_subtract
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 2 -'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( -1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '2 1 -'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_negate
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '-1 chs'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 chs'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( -1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_multiply
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '3 4 *'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 12 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_divide
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '3.0 4 /'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 0.75 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_inverse
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '4 inv'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 0.25 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_power
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '3 4 ^'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 81 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sqrt
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '16 √'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 4 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sq
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '4 sq'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 16 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_abs
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '-1 abs'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 abs'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_dec
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '0x1 dec'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_hex
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 hex'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1, 16 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_bin
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 bin'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1, 2 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_base
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 31 base'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1, 31 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sign
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '-10 sign'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( -1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '10 sign'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '0 sign'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 0 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-11-23 13:01:17 +01:00
|
|
|
end
|
2021-12-02 15:33:22 +01:00
|
|
|
|
|
|
|
def test_percent
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '2 33 %'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 0.66 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_inverse_percent
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '2 0.66 %CH'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 33 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_mod
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '9 4 mod'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_fact
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '5 !'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 24 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_floor
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '5.23 floor'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 5 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_ceil
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '5.23 ceil'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 6 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_min
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 2 min'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '2 1 min'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 1 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_max
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '1 2 max'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 2 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
|
2022-02-10 14:50:59 +01:00
|
|
|
interpreter = Rpl.new
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.run '2 1 max'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 2 )],
|
2022-02-09 13:38:32 +01:00
|
|
|
interpreter.stack
|
2021-12-02 15:33:22 +01:00
|
|
|
end
|
2022-02-11 15:46:47 +01:00
|
|
|
|
|
|
|
def test_ip
|
|
|
|
interpreter = Rpl.new
|
|
|
|
interpreter.run '3.14 ip'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 3 )],
|
2022-02-11 15:46:47 +01:00
|
|
|
interpreter.stack
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fp
|
|
|
|
interpreter = Rpl.new
|
|
|
|
interpreter.run '3.14 fp'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 0.14 )],
|
2022-02-11 15:46:47 +01:00
|
|
|
interpreter.stack
|
|
|
|
end
|
2022-02-15 18:48:19 +01:00
|
|
|
|
|
|
|
def test_mant
|
|
|
|
interpreter = Rpl.new
|
|
|
|
interpreter.run '123.456 mant -123.456 mant 0 mant'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 0.123456 ),
|
|
|
|
RplNumeric.new( 0.123456 ),
|
|
|
|
RplNumeric.new( 0 )],
|
2022-02-15 18:48:19 +01:00
|
|
|
interpreter.stack
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_xpon
|
|
|
|
interpreter = Rpl.new
|
|
|
|
interpreter.run '123.456 xpon -123.456 xpon 0 xpon'
|
2022-02-26 18:53:39 +01:00
|
|
|
assert_equal [RplNumeric.new( 3 ),
|
|
|
|
RplNumeric.new( 3 ),
|
|
|
|
RplNumeric.new( 0 )],
|
2022-02-15 18:48:19 +01:00
|
|
|
interpreter.stack
|
|
|
|
end
|
2021-11-10 16:44:57 +01:00
|
|
|
end
|